JTabbedPaneのタブにJTextFieldを配置してタイトルを編集
Total: 8286
, Today: 3
, Yesterday: 3
Posted by aterai at
Last-modified:
概要
JTabbedPane
で選択されたタブにJTextField
を配置し、そのタイトルを編集します。
Screenshot
Advertisement
サンプルコード
private Component tabComponent = null;
private int editing_idx = -1;
private int len = -1;
private Dimension dim;
private void startEditing() {
// System.out.println("start");
editing_idx = tabbedPane.getSelectedIndex();
tabComponent = tabbedPane.getTabComponentAt(editing_idx);
tabbedPane.setTabComponentAt(editing_idx, editor);
editor.setVisible(true);
editor.setText(tabbedPane.getTitleAt(editing_idx));
editor.selectAll();
editor.requestFocusInWindow();
len = editor.getText().length();
dim = editor.getPreferredSize();
editor.setMinimumSize(dim);
}
private void cancelEditing() {
// System.out.println("cancel");
if (editing_idx >= 0) {
tabbedPane.setTabComponentAt(editing_idx, tabComponent);
editor.setVisible(false);
editing_idx = -1;
len = -1;
tabComponent = null;
editor.setPreferredSize(null);
}
}
private void renameTabTitle() {
// System.out.println("rename");
String title = editor.getText().trim();
if (editing_idx >= 0 && !title.isEmpty()) {
tabbedPane.setTitleAt(editing_idx, title);
}
cancelEditing();
}
View in GitHub: Java, Kotlin解説
JTabbedPane
のタブタイトルを直接編集します。
JDK 6
で導入された、JTabbedPane#setTabComponentAt(...)
メソッドを使用してタブにJTextField
を追加しています。
操作方法などは、以下のように、GlassPane
を使用しているJTabbedPaneのタブタイトルを変更と同じですが、こちらは文字が入力されるたびに(JTabbedPane#revalidate()
しているので)タブの幅が広がります。
- 操作方法
- マウスでタブをダブルクリック、またはタブを選択してEnterキーで編集開始
- 編集中に入力欄以外をクリック、またはEnterキーでタイトル文字列が確定
- 編集中Tabキーを押しても無視
- Escキーで編集をキャンセル
- 文字列が空の状態で確定された場合、編集をキャンセル
参考リンク
- JTabbedPaneのタブタイトルを変更
- このリンク先のサンプルは
GlassPane
にJTextField
を配置してタブタイトルを編集しているためJDK 6
以前でも動作可
- このリンク先のサンプルは