Swing/EditTabTitle のバックアップ(No.8)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - 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のタブタイトルを変更
JTabbedPaneのタブタイトルを変更
編集者:Terai Atsuhiro
作成日:2006-03-27
更新日:2023-02-22 (水) 11:06:41
概要
JTabbedPaneのタブタイトルを直接編集します。
#screenshot
サンプルコード
class EditableTabbedPane extends JTabbedPane { private final MyGlassPane panel = new MyGlassPane(); private final JTextField editor = new JTextField(); private final JFrame frame; private final FocusTraversalPolicy policy; private FocusTraversalPolicy ftp; 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() { SwingUtilities.invokeLater(new Runnable() { public void run() { initEditor(); ftp = frame.getFocusTraversalPolicy(); panel.setVisible(true); editor.requestFocusInWindow(); frame.setFocusTraversalPolicy(policy); } }); } private void cancelEditing() { SwingUtilities.invokeLater(new Runnable() { public void run() { frame.setFocusTraversalPolicy(ftp); panel.setVisible(false); } }); } private void renameTab() { SwingUtilities.invokeLater(new Runnable() { public void run() { frame.setFocusTraversalPolicy(ftp); if(editor.getText().trim().length()>0) { setTitleAt(getSelectedIndex(), editor.getText()); } panel.setVisible(false); } }); } }
- &jnlp;
- &jar;
- &zip;
解説
Excel風にJTabbedPaneのタブタイトルを直接編集しています。
編集が開始されると、対象となるタブ上にJTextFieldをレイアウトしたGlassPaneを表示しています。編集中はフォーカスの移動が起こらないようにするためのFocusTraversalPolicyを設定しています。
- 操作方法
- ダブルクリック、またはリターンで編集開始
- 入力欄以外をクリック、またはリターンで確定
- 編集中タブキーを押しても無視
- Escでキャンセル
- 0文字で確定するとキャンセル扱い