Swing/ExpandActiveTabWidth のバックアップ差分(No.2)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/ExpandActiveTabWidth へ行く。
- 1 (2018-12-26 (水) 17:34:46)
- 2 (2019-06-19 (水) 16:08:58)
- 3 (2019-09-03 (火) 14:03:21)
- 4 (2020-03-27 (金) 14:39:55)
- 5 (2021-08-23 (月) 17:17:34)
- 追加された行はこの色です。
- 削除された行はこの色です。
--- category: swing folder: ExpandActiveTabWidth title: JTabbedPaneで選択されているタブの幅のみ拡張する tags: [JTabbedPane] author: aterai pubdate: 2018-10-29T16:08:36+09:00 description: JTabbedPaneで現在選択されているタブの幅は拡張、その他のタブは縮小するよう設定します。 image: https://drive.google.com/uc?id=1NIZXoyEHh-K_H-BZ83l3pG5phVRjpmOzbQ --- * 概要 [#summary] `JTabbedPane`で現在選択されているタブの幅は拡張、その他のタブは縮小するよう設定します。 #download(https://drive.google.com/uc?id=1NIZXoyEHh-K_H-BZ83l3pG5phVRjpmOzbQ) * サンプルコード [#sourcecode] #code(link){{ 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; } } }} * 解説 [#explanation] - `JTabbedPane#setTabComponentAt(...)`メソッドで、タブコンポーネントとして`JLabel`を設定 - `JLabel#getPreferredSize()`をオーバーライドして、選択されていない場合はその推奨サイズを縮小 - `JLabel#getPreferredSize()`をオーバーライドして、選択されていない場合はその`JLabel`の推奨サイズを縮小 -- 選択されている場合は、`super.getPreferredSize()`で元のサイズを返す - `JTabbedPane`に`ChangeListener`を追加し、タブ選択が変更されたらすべてのタブコンポーネントの選択状態(推奨サイズ)を更新 - タブの配置が左右の場合は、選択されたタブの幅のみ変更しても意味がないのでこの処理は実行しない * 参考リンク [#reference] - [[JTabbedPaneの選択文字色を変更>Swing/ColorTab]] * コメント [#comment] #comment #comment