Swing/TabTitleEditor の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/TabTitleEditor へ行く。
- Swing/TabTitleEditor の差分を削除
--- category: swing folder: TabTitleEditor title: JTabbedPaneのタブにJTextFieldを配置してタイトルを編集 tags: [JTabbedPane, JTextField, MouseListener, ChangeListener, InputMap, ActionMap] author: aterai pubdate: 2008-09-08T14:02:08+09:00 description: JTabbedPaneで選択されたタブにJTextFieldを配置し、そのタイトルを編集します。 image: https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTU43AZWdI/AAAAAAAAAmw/6klnGPa4D9o/s800/TabTitleEditor.png hreflang: href: https://java-swing-tips.blogspot.com/2008/09/double-click-on-each-tab-and-change-its.html lang: en --- * 概要 [#summary] `JTabbedPane`で選択されたタブに`JTextField`を配置し、そのタイトルを編集します。 #download(https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTU43AZWdI/AAAAAAAAAmw/6klnGPa4D9o/s800/TabTitleEditor.png) * サンプルコード [#sourcecode] #code(link){{ 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(); } }} * 解説 [#explanation] `JTabbedPane`のタブタイトルを直接編集します。 `JDK 6`で導入された、`JTabbedPane#setTabComponentAt(...)`メソッドを使用してタブに`JTextField`を追加しています。 操作方法などは、以下のように、`GlassPane`を使用している[[JTabbedPaneのタブタイトルを変更>Swing/EditTabTitle]]と同じですが、こちらは文字が入力されるたびに(`JTabbedPane#revalidate()`しているので)タブの幅が広がります。 - 操作方法 -- マウスでタブをダブルクリック、またはタブを選択してKBD{Enter}キーで編集開始 -- 編集中に入力欄以外をクリック、またはKBD{Enter}キーでタイトル文字列が確定 -- 編集中KBD{Tab}キーを押しても無視 -- KBD{Esc}キーで編集をキャンセル -- 文字列が空の状態で確定された場合、編集をキャンセル * 参考リンク [#reference] - [[JTabbedPaneのタブタイトルを変更>Swing/EditTabTitle]] -- こちらは、`GlassPane`に`JTextField`を配置してタブタイトルを編集しているため`JDK 6`以前でも動作可 -- このリンク先のサンプルは`GlassPane`に`JTextField`を配置してタブタイトルを編集しているため`JDK 6`以前でも動作可 * コメント [#comment] #comment - `setTabComponentAt(...)`メソッドで閉じるボタンなどと併用していた場合、編集後にそのボタンなどが消える不具合をメールで指摘してもらったので、修正。 -- &user(aterai); &new{2010-08-10 (火) 16:47:33}; #comment