JTabbedPaneで選択されているタブの幅のみ拡張する
Total: 1980
, Today: 1
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
JTabbedPane
で現在選択されているタブの幅は拡張、その他のタブは縮小するよう設定します。
Screenshot
Advertisement
サンプルコード
public static void updateTabWidth(JTabbedPane tabs) {
int tp = tabs.getTabPlacement();
if (tp == JTabbedPane.LEFT || tp == JTabbedPane.RIGHT) {
return;
}
int sidx = tabs.getSelectedIndex();
for (int i = 0; i < tabs.getTabCount(); i++) {
Component c = tabs.getTabComponentAt(i);
if (c instanceof ShrinkLabel) {
((ShrinkLabel) c).setSelected(i == sidx);
}
}
}
class ShrinkLabel extends JLabel {
private boolean isSelected;
protected ShrinkLabel(String title, Icon icon) {
super(title, icon, SwingConstants.LEFT);
}
@Override public Dimension getPreferredSize() {
Dimension d = super.getPreferredSize();
if (!isSelected) {
d.width = 20;
}
return d;
}
public void setSelected(boolean active) {
this.isSelected = active;
}
public boolean isSelected() {
return isSelected;
}
}
View in GitHub: Java, Kotlin解説
JTabbedPane#setTabComponentAt(...)
メソッドを使用してタブコンポーネントにJLabel
を設定JLabel#getPreferredSize()
メソッドをオーバーライドして選択されていない場合はそのJLabel
の推奨サイズを縮小- 選択されている場合は、
super.getPreferredSize()
メソッドでJLabel
の元サイズを返す
- 選択されている場合は、
JTabbedPane
にChangeListener
を追加し、タブ選択が変更されたらすべてのタブコンポーネントの選択状態(推奨サイズ)を更新- タブの配置が左右の場合は、選択されたタブの幅のみ変更しても意味がないのでこの処理は実行しない