Swing/EditTabTitle のバックアップ(No.14)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/EditTabTitle へ行く。
- 1 (2006-04-11 (火) 12:24:38)
- 2 (2006-04-12 (水) 19:43:05)
- 3 (2006-04-19 (水) 16:05:39)
- 4 (2006-05-11 (木) 15:06:05)
- 5 (2006-05-24 (水) 08:29:00)
- 6 (2006-07-21 (金) 16:27:39)
- 7 (2006-09-01 (金) 15:04:00)
- 8 (2006-11-10 (金) 00:19:51)
- 9 (2006-11-10 (金) 03:34:07)
- 10 (2007-01-23 (火) 12:39:47)
- 11 (2007-05-15 (火) 17:50:24)
- 12 (2007-07-03 (火) 19:22:58)
- 13 (2008-09-08 (月) 13:51:59)
- 14 (2010-08-10 (火) 16:49:52)
- 15 (2013-03-13 (水) 15:31:34)
- 16 (2013-05-03 (金) 23:48:10)
- 17 (2013-07-26 (金) 01:09:04)
- 18 (2013-08-20 (火) 14:21:48)
- 19 (2013-08-29 (木) 01:15:23)
- 20 (2013-10-11 (金) 12:50:30)
- 21 (2014-11-25 (火) 03:03:31)
- 22 (2014-11-28 (金) 16:26:40)
- 23 (2015-02-17 (火) 22:27:08)
- 24 (2015-03-28 (土) 15:36:28)
- 25 (2016-05-20 (金) 19:21:44)
- 26 (2016-05-27 (金) 13:12:04)
- 27 (2016-09-02 (金) 13:30:20)
- 28 (2017-01-20 (金) 13:21:51)
- 29 (2017-12-14 (木) 16:31:10)
- 30 (2018-02-24 (土) 19:51:30)
- 31 (2019-01-18 (金) 17:29:11)
- 32 (2020-11-28 (土) 13:32:36)
- 33 (2023-02-22 (水) 11:06:41)
TITLE:JTabbedPaneのタブタイトルを変更
Posted by terai at 2006-03-27
JTabbedPaneのタブタイトルを変更
JTabbedPaneのタブタイトルを直接編集します。
- &jnlp;
- &jar;
- &zip;
#screenshot
サンプルコード
class EditableTabbedPane extends JTabbedPane {
private final MyGlassPane panel = new MyGlassPane();
private final JTextField editor = new JTextField();
private final JFrame frame;
private Rectangle rect;
public EditableTabbedPane(JFrame frame) {
this.frame = frame;
//......
panel.add(editor);
frame.setGlassPane(panel);
panel.setVisible(false);
}
class MyGlassPane extends JPanel{
public MyGlassPane() {
super((LayoutManager)null);
setOpaque(false);
addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent me) {
if(rect==null || rect.contains(me.getPoint())) return;
renameTab();
}
});
}
}
private void initEditor() {
rect = getUI().getTabBounds(this, getSelectedIndex());
rect.setRect(rect.x+2, rect.y+2, rect.width-2, rect.height-2);
editor.setBounds(rect);
editor.setText(getTitleAt(getSelectedIndex()));
}
private void startEditing() {
initEditor();
panel.setVisible(true);
editor.requestFocusInWindow();
}
private void cancelEditing() {
panel.setVisible(false);
}
private void renameTab() {
if(editor.getText().trim().length()>0) {
setTitleAt(getSelectedIndex(), editor.getText());
}
panel.setVisible(false);
}
}
解説
Excel風にJTabbedPaneのタブタイトルを直接編集しています。
編集が開始されると、対象となるタブ上にJTextFieldをレイアウトしたGlassPaneを表示しています。このGlassPaneには、編集中はフォーカスの移動が起こらないようにするためのFocusTraversalPolicyなどを設定しています。
- 操作方法
- マウスでタブをダブルクリック、またはタブを選択してリターンキーで編集開始
- 編集中に入力欄以外をクリック、またはリターンキーでタイトル文字列が確定
- 編集中タブキーを押しても無視
- Escで編集をキャンセル
- 0文字で確定した場合も、キャンセル扱い
参考リンク
- Cursorを砂時計に変更
- JTabbedPaneのタブにJTextFieldを配置してタイトルを編集
- JDK 6 版です。タブにJTextFieldをJTabbedPane#setTabComponentAt メソッドを使用して配置しています。
- Swing - Floating text field
- JPopupMenuにJTextFieldを配置することで同様のことを行うコードをKelVarnsonさんが投稿しています。