Swing/TabWithCheckBox の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/TabWithCheckBox へ行く。
- Swing/TabWithCheckBox の差分を削除
--- category: swing folder: TabWithCheckBox title: JTabbedPaneのタブにJCheckBoxを追加 tags: [JTabbedPane, JCheckBox, JPanel, JLabel] author: aterai pubdate: 2016-06-13T01:27:42+09:00 description: JTabbedPaneのタブ内にクリック可能なJCheckBoxを追加します。 image: https://lh3.googleusercontent.com/-b5jcwNkPYZc/V12KPOBZsFI/AAAAAAAAObI/5fJ6EGqkXMg7fYFyLSDa_MwGJ3hXZGE-QCCo/s800/TabWithCheckBox.png --- * 概要 [#summary] `JTabbedPane`のタブ内にクリック可能な`JCheckBox`を追加します。 #download(https://lh3.googleusercontent.com/-b5jcwNkPYZc/V12KPOBZsFI/AAAAAAAAObI/5fJ6EGqkXMg7fYFyLSDa_MwGJ3hXZGE-QCCo/s800/TabWithCheckBox.png) * サンプルコード [#sourcecode] #code(link){{ JTabbedPane tabs = new JTabbedPane() { @Override public void addTab(String title, Component content) { super.addTab(title, content); JCheckBox check = new JCheckBox(); check.setOpaque(false); check.setFocusable(false); JPanel p = new JPanel(new FlowLayout(FlowLayout.LEADING, 0, 0)); p.setOpaque(false); p.add(check, BorderLayout.WEST); p.add(new JLabel(title)); setTabComponentAt(getTabCount() - 1, p); } }; }} * 解説 [#explanation] 上記のサンプルでは、`JDK 6`で追加された`JTabbedPane`のタブにコンポーネントを配置する機能を使用して`JCheckBox`を各タブの内部に追加しています。 - タブタイトル文字列を`JCheckBox#setText(...)`で設定した`JCheckBox`を`JTabbedPane#setTabComponentAt(...)`で追加するのではなく、タブタイトル用の`JLabel`とチェックアイコンのみの`JCheckBox`に分割して`JPanel`に配置 - タブタイトル文字列用の`JLabel`はクリックイベントを処理しないよう設定 - このためタブタイトルをクリックしても別コンポーネントである`JCheckBox`のチェック状態は変化せずタブの切り替えが実行される - このためタブタイトルをクリックしても別コンポーネントである`JCheckBox`のチェック状態は変化せずタブの切り替えが実行可能 * 参考リンク [#reference] - [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JTabbedPane.html#setTabComponentAt-int-java.awt.Component- JTabbedPane#setTabComponentAt(...) (Java Platform SE 8)] * コメント [#comment] #comment #comment