1 package jp.sourceforge.stigmata.ui.swing.tab;
3 import java.awt.FocusTraversalPolicy;
4 import java.awt.Rectangle;
5 import java.awt.event.FocusAdapter;
6 import java.awt.event.FocusEvent;
7 import java.awt.event.KeyAdapter;
8 import java.awt.event.KeyEvent;
9 import java.awt.event.MouseAdapter;
10 import java.awt.event.MouseEvent;
12 import javax.swing.BorderFactory;
13 import javax.swing.JFrame;
14 import javax.swing.JMenuBar;
15 import javax.swing.JTabbedPane;
16 import javax.swing.JTextField;
19 * This program is copied from below URL.
20 * http://terai.xrea.jp/Swing/EditTabTitle.html
22 * @author Haruaki Tamada
23 * @author Terai Atsuhiro
25 public class EditableTabbedPane extends JTabbedPane{
26 private static final long serialVersionUID = -66174062280771547L;
28 private final EditableGlassPane panel;
29 private final JTextField editor;
30 private final JFrame frame;
31 private final FocusTraversalPolicy policy;
32 private FocusTraversalPolicy ftp;
34 public EditableTabbedPane(JFrame frame){
36 this.panel = new EditableGlassPane(this);
37 this.editor = new JTextField();
39 policy = new EditableTabbedPaneFocusTraversalPolicy(editor);
41 editor.setBorder(BorderFactory.createEmptyBorder(0, 3, 0, 3));
42 editor.addFocusListener(new FocusAdapter(){
44 public void focusGained(final FocusEvent e){
45 ((JTextField)e.getSource()).selectAll();
48 editor.addKeyListener(new KeyAdapter(){
50 public void keyPressed(KeyEvent e){
51 if(e.getKeyCode() == KeyEvent.VK_ENTER){
54 else if(e.getKeyCode() == KeyEvent.VK_ESCAPE){
59 addMouseListener(new MouseAdapter(){
61 public void mouseClicked(MouseEvent me){
62 if(me.getClickCount() == 2){
67 addKeyListener(new KeyAdapter(){
69 public void keyPressed(KeyEvent e){
70 if(e.getKeyCode() == KeyEvent.VK_ENTER){
76 frame.setGlassPane(panel);
78 panel.setVisible(false);
82 frame.setFocusTraversalPolicy(ftp);
83 if(editor.getText().trim().length() > 0){
84 setTitleAt(getSelectedIndex(), editor.getText());
86 panel.setVisible(false);
89 private void startEditing(){
91 ftp = frame.getFocusTraversalPolicy();
92 panel.setVisible(true);
93 editor.requestFocusInWindow();
94 frame.setFocusTraversalPolicy(policy);
97 private void cancelEditing(){
98 frame.setFocusTraversalPolicy(ftp);
99 panel.setVisible(false);
102 private void initEditor(){
103 JMenuBar bar = frame.getJMenuBar();
104 Rectangle rect = getUI().getTabBounds(this, getSelectedIndex());
105 rect.setRect(rect.x + 2, rect.y + 2, rect.width - 2, rect.height - 2);
107 rect.y += bar.getSize().height;
109 panel.setRectangle(rect);
111 editor.setBounds(rect);
112 editor.setText(getTitleAt(getSelectedIndex()));