Swing/SelectedTabHeight のバックアップの現在との差分(No.4)
-
category: swing
folder: SelectedTabHeight
title: JTabbedPaneで選択したタブの高さを変更
tags: [JTabbedPane]
author: aterai
pubdate: 2010-04-05T04:28:58+09:00
description: JTabbedPaneで選択したタブの高さを変更します。
image:
hreflang:
href: https://java-swing-tips.blogspot.com/2010/04/jtabbedpane-selected-tab-height.html lang: en
概要
概要
JTabbedPane
で選択したタブの高さを変更します。
Screenshot
Advertisement
サンプルコード
サンプルコード
#spandel
tabbedPane.setUI(new com.sun.java.swing.plaf.windows.WindowsTabbedPaneUI() {
#spanend
private static final int tabAreaHeight = 32;
#spanadd
class WindowsTabHeightTabbedPaneUI extends WindowsTabbedPaneUI {
#spanend
private static final int TAB_AREA_HEIGHT = 32;
@Override protected int calculateTabHeight(
int tabPlacement, int tabIndex, int fontHeight) {
return tabAreaHeight;
return TAB_AREA_HEIGHT;
}
@Override protected void paintTab(
Graphics g, int tabPlacement, Rectangle[] rects,
int tabIndex, Rectangle iconRect, Rectangle textRect) {
if(tabPane.getSelectedIndex()!=tabIndex &&
tabPlacement!=JTabbedPane.LEFT &&
tabPlacement!=JTabbedPane.RIGHT) {
int tabHeight = tabAreaHeight/2 + 3;
if (tabPane.getSelectedIndex() != tabIndex
&& tabPlacement != JTabbedPane.LEFT
&& tabPlacement != JTabbedPane.RIGHT) {
int tabHeight = TAB_AREA_HEIGHT / 2 + 3;
rects[tabIndex].height = tabHeight;
if(tabPlacement==JTabbedPane.TOP) {
rects[tabIndex].y = tabAreaHeight - tabHeight + 3;
if (tabPlacement == JTabbedPane.TOP) {
rects[tabIndex].y = TAB_AREA_HEIGHT - tabHeight + 3;
}
}
super.paintTab(g, tabPlacement, rects, tabIndex, iconRect, textRect);
}
#spandel
});
#spanend
#spanadd
}
#spanend
View in GitHub: Java, Kotlin解説
解説
上記のサンプルでは、選択されていないタブの高さを低くすることで、選択されたタブの高さが目立つように設定しています。-
BasicTabbedPaneUI#calculateTabHeight(...)
などをオーバーライドして、タブ(領域)の高さを変更 -
BasicTabbedPaneUI#calculateTabHeight(...)
などをオーバーライドして、タブ領域の高さを変更 BasicTabbedPaneUI#paintTab(...)
などをオーバーライドして、描画されるタブの高さをBasicTabbedPaneUI#calculateTabHeight(...)
で設定した高さの半分程度に変更JTabbedPane.TOP
の場合、選択されていないタブのy
座標を下に移動
- 対応しているのは、
JTabbedPane.SCROLL_TAB_LAYOUT
の場合のみ - 対応しているのは
JTabbedPane.SCROLL_TAB_LAYOUT
の場合のみJTabbedPane.TOP
とJTabbedPane.BOTTOM
の場合、選択したタブの高さが変化するJTabbedPane.LEFT
とJTabbedPane.RIGHT
の場合、すべてのタブがBasicTabbedPaneUI#calculateTabHeight(...)
で設定した高さになる
注: 以下のようにタブの位置を変更する
JComboBox
を追加したので、JDK 1.7.0
以上が必要
- タブの位置を変更する
JComboBox
を追加private static enum TabPlacements { TOP(JTabbedPane.TOP), BOTTOM(JTabbedPane.BOTTOM), LEFT(JTabbedPane.LEFT), RIGHT(JTabbedPane.RIGHT); public final int tabPlacement; private TabPlacements(int tabPlacement) { this.tabPlacement = tabPlacement; } } private final JComboBox<TabPlacements> comboBox = new JComboBox<>(TabPlacements.values()); private final JTabbedPane tabbedPane = new JTabbedPane( JTabbedPane.TOP, JTabbedPane.SCROLL_TAB_LAYOUT); #spandel //... #spanend #spanadd // ... #spanend comboBox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if(e.getStateChange()==ItemEvent.SELECTED) { tabbedPane.setTabPlacement(((TabPlacements)e.getItem()).tabPlacement); if (e.getStateChange() == ItemEvent.SELECTED) { tabbedPane.setTabPlacement(((TabPlacements) e.getItem()).tabPlacement); } } });