1 package jp.sourceforge.stigmata.ui.swing.tab;
7 import java.awt.FocusTraversalPolicy;
8 import java.awt.Rectangle;
9 import java.awt.event.FocusAdapter;
10 import java.awt.event.FocusEvent;
11 import java.awt.event.KeyAdapter;
12 import java.awt.event.KeyEvent;
13 import java.awt.event.MouseAdapter;
14 import java.awt.event.MouseEvent;
16 import javax.swing.BorderFactory;
17 import javax.swing.JFrame;
18 import javax.swing.JMenuBar;
19 import javax.swing.JTabbedPane;
20 import javax.swing.JTextField;
23 * This program is copied from below URL.
24 * http://terai.xrea.jp/Swing/EditTabTitle.html
26 * @author Haruaki Tamada
27 * @author Terai Atsuhiro
30 public class EditableTabbedPane extends JTabbedPane{
31 private static final long serialVersionUID = -66174062280771547L;
33 private final EditableGlassPane panel;
34 private final JTextField editor;
35 private final JFrame frame;
36 private final FocusTraversalPolicy policy;
37 private FocusTraversalPolicy ftp;
39 public EditableTabbedPane(JFrame frame){
41 this.panel = new EditableGlassPane(this);
42 this.editor = new JTextField();
44 policy = new EditableTabbedPaneFocusTraversalPolicy(editor);
46 editor.setBorder(BorderFactory.createEmptyBorder(0, 3, 0, 3));
47 editor.addFocusListener(new FocusAdapter(){
49 public void focusGained(final FocusEvent e){
50 ((JTextField)e.getSource()).selectAll();
53 editor.addKeyListener(new KeyAdapter(){
55 public void keyPressed(KeyEvent e){
56 if(e.getKeyCode() == KeyEvent.VK_ENTER){
59 else if(e.getKeyCode() == KeyEvent.VK_ESCAPE){
64 addMouseListener(new MouseAdapter(){
66 public void mouseClicked(MouseEvent me){
67 if(me.getClickCount() == 2){
72 addKeyListener(new KeyAdapter(){
74 public void keyPressed(KeyEvent e){
75 if(e.getKeyCode() == KeyEvent.VK_ENTER){
81 frame.setGlassPane(panel);
83 panel.setVisible(false);
87 frame.setFocusTraversalPolicy(ftp);
88 if(editor.getText().trim().length() > 0){
89 setTitleAt(getSelectedIndex(), editor.getText());
91 panel.setVisible(false);
94 private void startEditing(){
96 ftp = frame.getFocusTraversalPolicy();
97 panel.setVisible(true);
98 editor.requestFocusInWindow();
99 frame.setFocusTraversalPolicy(policy);
102 private void cancelEditing(){
103 frame.setFocusTraversalPolicy(ftp);
104 panel.setVisible(false);
107 private void initEditor(){
108 JMenuBar bar = frame.getJMenuBar();
109 Rectangle rect = getUI().getTabBounds(this, getSelectedIndex());
110 rect.setRect(rect.x + 2, rect.y + 2, rect.width - 2, rect.height - 2);
112 rect.y += bar.getSize().height;
114 panel.setRectangle(rect);
116 editor.setBounds(rect);
117 editor.setText(getTitleAt(getSelectedIndex()));