• 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

概要

JTabbedPaneのタブ内にクリック可能なJCheckBoxを追加します。

サンプルコード

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);
  }
};
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、JDK 6で追加されたJTabbedPaneのタブにコンポーネントを配置する機能を使用してJCheckBoxを各タブの内部に追加しています。

直接JCheckBoxJTabbedPane#setTabComponentAt(...)で追加するのではなく、タブタイトルをJLabelに分離し、チェックアイコンのみのJCheckBoxと合わせてJPanelに配置して使用しています。このため、タブタイトル文字列をクリックしてもJCheckBoxのチェック状態は変化せず(このJLabelはクリックイベントを処理しない)、タブの切り替えが実行されます。

参考リンク

コメント