Swing/TabWithCloseButton のバックアップの現在との差分(No.3)
TITLE:JTabbedPaneにタブを閉じるボタンを追加
JTabbedPaneにタブを閉じるボタンを追加
編集者:Terai Atsuhiro~
作成日:2007-01-29
更新日:2023-10-06 (金) 15:35:46
概要
JDK 6
の新機能を使用し、JTabbedPane
のタブ内に自身を閉じるためのボタンを追加します。
Screenshot
Advertisement
概要
JDK 6 の新機能を使ってJTabbedPaneにタブを閉じるボタンを追加します。サンプルコード
#spanend
#spanadd
class CloseButtonTabbedPane extends JTabbedPane {
#spanend
private final Icon icon;
private final Dimension buttonSize;
public CloseButtonTabbedPane(Icon icon) {
super();
// icon = new CloseTabIcon();
this.icon = icon;
buttonSize = new Dimension(icon.getIconWidth(), icon.getIconHeight());
}
#spandel
#screenshot
#spanend
#spandel
#spanend
#spandel
**サンプルコード [#ebac5cc8]
#spanend
#spandel
#code{{
#spanend
class CloseButtonTabbedPane extends JTabbedPane {
private final Icon icon;
private final Dimension buttonSize;
public CloseButtonTabbedPane(Icon icon) {
super();
//icon = new CloseTabIcon();
this.icon = icon;
buttonSize = new Dimension(icon.getIconWidth(), icon.getIconHeight());
}
public void addTab(String title, final JComponent content) {
JPanel tab = new JPanel(new BorderLayout());
tab.setOpaque(false);
JLabel label = new JLabel(title);
label.setBorder(BorderFactory.createEmptyBorder(0,0,0,4));
JButton button = new JButton(icon);
button.setPreferredSize(buttonSize);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
removeTabAt(indexOfComponent(content));
}
});
tab.add(label, BorderLayout.WEST);
tab.add(button, BorderLayout.EAST);
tab.setBorder(BorderFactory.createEmptyBorder(2,1,1,1));
super.addTab(null, content);
setTabComponentAt(getTabCount()-1, tab);
}
}
@Override public void addTab(String title, final JComponent content) {
JPanel tab = new JPanel(new BorderLayout());
tab.setOpaque(false);
JLabel label = new JLabel(title);
label.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 4));
JButton button = new JButton(icon);
button.setPreferredSize(buttonSize);
button.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
removeTabAt(indexOfComponent(content));
}
});
tab.add(label, BorderLayout.WEST);
tab.add(button, BorderLayout.EAST);
tab.setBorder(BorderFactory.createEmptyBorder(2, 1, 1, 1));
super.addTab(null, content);
setTabComponentAt(getTabCount() - 1, tab);
}
#spanadd
}
#spanend
View in GitHub: Java, Kotlin- &jnlp;
- &jar;
- &zip;
解説
JDK 6 から追加されたタブにコンポーネントを配置する機能を使って、JButtonをタブに追加しています。解説
-
JDK 6
で追加されたJTabbedPane#setTabComponentAt(...)メソッドを使用して、指定したタブ内にJButton
を配置-
JButton
にActionListener
を追加し、クリックでJTabbedPane#removeTabAt(...)
を実行してタブを削除
-
- 以前のサンプルに比べると実装も簡単でコードも短くなる
参考リンク
- More Enhancements in Java SE 6
- How to Use Tabbed Panes (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
- JTabbedPane#setTabComponentAt(...) (Java Platform SE 8)
- JTabbedPaneにタブを閉じるアイコンを追加
- JTabbedPaneのTabTitleを左揃えに変更