Swing/RevalidateTabComponent のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/RevalidateTabComponent へ行く。
- 1 (2010-08-30 (月) 18:25:18)
- 2 (2011-04-22 (金) 17:36:54)
- 3 (2011-11-30 (水) 17:53:55)
- 4 (2012-12-28 (金) 12:29:11)
- 5 (2013-07-24 (水) 21:56:06)
- 6 (2015-02-05 (木) 14:34:11)
- 7 (2016-09-09 (金) 15:04:44)
- 8 (2017-04-04 (火) 14:17:08)
- 9 (2017-10-24 (火) 17:20:37)
- 10 (2019-05-15 (水) 21:10:09)
- 11 (2021-02-10 (水) 11:01:24)
- 12 (2024-04-19 (金) 12:58:27)
TITLE:TabComponentの名前を更新
Posted by aterai at 2010-08-30
TabComponentの名前を更新
TabComponentを使用するJTabbedPaneで、タブ名称を編集更新します。
- &jnlp;
- &jar;
- &zip;
サンプルコード
class TabTitleRenamePopupMenu extends JPopupMenu {
private final JTextField textField = new JTextField(10);
private final Action renameAction = new AbstractAction("rename") {
public void actionPerformed(ActionEvent e) {
JTabbedPane t = (JTabbedPane)getInvoker();
int idx = t.getSelectedIndex();
String title = t.getTitleAt(idx);
textField.setText(title);
int result = JOptionPane.showConfirmDialog(
t, textField, "Rename", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
if(result==JOptionPane.OK_OPTION) {
String str = textField.getText();
if(!str.trim().isEmpty()) {
t.setTitleAt(idx, str);
JComponent c = (JComponent)t.getTabComponentAt(idx);
c.revalidate();
}
}
}
};
private final Action newTabAction = new AbstractAction("new tab") {
@Override public void actionPerformed(ActionEvent evt) {
JTabbedPane t = (JTabbedPane)getInvoker();
int count = t.getTabCount();
String title = "Tab " + count;
t.add(title, new JLabel(title));
t.setTabComponentAt(count, new ButtonTabComponent(t));
}
};
private final Action closeAllAction = new AbstractAction("close all") {
@Override public void actionPerformed(ActionEvent evt) {
JTabbedPane t = (JTabbedPane)getInvoker();
t.removeAll();
}
};
public TabTitleRenamePopupMenu() {
super();
textField.addAncestorListener(new AncestorListener() {
public void ancestorAdded(AncestorEvent e) {
textField.requestFocusInWindow();
}
public void ancestorMoved(AncestorEvent e) {}
public void ancestorRemoved(AncestorEvent e) {}
});
add(renameAction);
addSeparator();
add(newTabAction);
add(closeAllAction);
}
public void show(Component c, int x, int y) {
JTabbedPane t = (JTabbedPane)c;
renameAction.setEnabled(t.indexAtLocation(x, y)>=0);
super.show(c, x, y);
}
};
解説
上記のサンプルでは、タブを閉じるJButtonをTabComponentに追加したJTabbedPaneに、タブ名称を変更するPopupMenuを設定しています。
How to Use Tabbed Panes (The Java Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)のButtonTabComponentを使っているので、JTabbedPane#setTitleAt(...)と名前を変更したあとで、( (JComponent)tabbedPane.getTabComponentAt(idx) ).revalidate()として、タブの内部レイアウトを検証し直しています。
参考リンク
- How to Use Tabbed Panes (The Java Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
- JTabbedPaneのタブにJTextFieldを配置してタイトルを編集
- JTabbedPaneのタブタイトルを変更
- JTabbedPaneにタブを閉じるボタンを追加