Swing/SelectedTabHeight のバックアップ(No.5)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/SelectedTabHeight へ行く。
- 1 (2010-04-08 (木) 15:08:55)
- 2 (2013-01-02 (水) 14:12:51)
- 3 (2013-08-07 (水) 13:26:25)
- 4 (2014-12-02 (火) 01:47:30)
- 5 (2016-02-19 (金) 14:56:59)
- 6 (2017-07-14 (金) 15:05:37)
- 7 (2018-02-24 (土) 19:51:30)
- 8 (2018-05-31 (木) 14:41:58)
- 9 (2019-05-22 (水) 19:35:38)
- 10 (2019-06-07 (金) 15:20:16)
- 11 (2021-02-20 (土) 09:53:47)
- title: JTabbedPaneで選択したタブの高さを変更
tags: [JTabbedPane]
author: aterai
pubdate: 2010-04-05T04:28:58+09:00
description: JTabbedPaneで選択したタブの高さを変更します。
hreflang:
href: http://java-swing-tips.blogspot.com/2010/04/jtabbedpane-selected-tab-height.html lang: en
概要
JTabbedPane
で選択したタブの高さを変更します。
Screenshot
Advertisement
サンプルコード
tabbedPane.setUI(new com.sun.java.swing.plaf.windows.WindowsTabbedPaneUI() {
private static final int tabAreaHeight = 32;
@Override protected int calculateTabHeight(
int tabPlacement, int tabIndex, int fontHeight) {
return tabAreaHeight;
}
@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;
rects[tabIndex].height = tabHeight;
if (tabPlacement == JTabbedPane.TOP) {
rects[tabIndex].y = tabAreaHeight - tabHeight + 3;
}
}
super.paintTab(g, tabPlacement, rects, tabIndex, iconRect, textRect);
}
});
View in GitHub: Java, Kotlin解説
上記のサンプルでは、選択されていないタブの高さを低くすることで、選択されたタブの高さが目立つように設定しています。
BasicTabbedPaneUI#calculateTabHeight(...)
などをオーバーライドして、タブ(領域)の高さを変更BasicTabbedPaneUI#paintTab(...)
などをオーバーライドして、描画されるタブの高さをBasicTabbedPaneUI#calculateTabHeight(...)
で設定した高さの半分程度に変更JTabbedPane.TOP
の場合、選択されていないタブのy
座標を下に移動
- 対応しているのは、
JTabbedPane.SCROLL_TAB_LAYOUT
の場合のみJTabbedPane.TOP
とJTabbedPane.BOTTOM
の場合、選択したタブの高さが変化するJTabbedPane.LEFT
とJTabbedPane.RIGHT
の場合、すべてのタブがBasicTabbedPaneUI#calculateTabHeight(...)
で設定した高さになる
注: 以下のようにタブの位置を変更するJComboBox
を追加したので、JDK 1.7.0
以上が必要
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);
//...
comboBox.addItemListener(new ItemListener() {
@Override public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
tabbedPane.setTabPlacement(((TabPlacements) e.getItem()).tabPlacement);
}
}
});