Изменить название вкладки

введите здесь описание изображения

Я хотел бы изменить имя вкладки, щелкнув элемент «Переименовать» во всплывающем меню, добавив ActionPerformed, и введите непосредственно на вкладке новое имя.

Я нашел это jTabbedPane.setTitleAt(count, "string here");

но это не то, что я хочу, это просто установка строки, переданной в качестве аргумента.

Спасибо


person Alberto acepsut    schedule 14.03.2012    source источник
comment
что ты хочешь сделать??? четко указать..   -  person    schedule 14.03.2012
comment
Я хотел бы изменить имя на каждой вкладке, введя новое имя: теперь имя каждой вкладки установлено как «Рабочее пространство + количество»; моя цель: щелкните правой кнопкой мыши, появится всплывающее окно «Переименовать», нажмите «Переименовать вкладку Заголовок ()», затем введите и установите новое имя.   -  person Alberto acepsut    schedule 14.03.2012
comment
Вы пробовали setTitleAt()... если да, то с чем вы столкнулись?   -  person    schedule 14.03.2012
comment
@LaxmaRana, пожалуйста, не придумывайте слова и почините клавиатуру (знак вопроса залипает :-)   -  person kleopatra    schedule 14.03.2012
comment
не поддерживается - вам нужно реализовать это самостоятельно. Никогда не пробовал, возможно, временная установка пользовательского компонента вкладки, содержащего JTextField, поможет   -  person kleopatra    schedule 14.03.2012


Ответы (1)


Добавляя JPopupMenu можно определить index и getTitleAt() из JTabbedPane

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;

public class TabPopupDemo extends JFrame {

    private static final long serialVersionUID = 1L;
    private JLabel jLabel1;
    private JLabel jLabel2;
    private JMenuItem jMenuItem1;
    private JPopupMenu jPopupMenu1;
    private JTabbedPane jTabbedPane1;

    public TabPopupDemo() {
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(400, 300);
        setLocationRelativeTo(null);
        jPopupMenu1 = new JPopupMenu();
        jMenuItem1 = new JMenuItem("jMenuItem1");
        jTabbedPane1 = new JTabbedPane();
        jLabel1 = new JLabel("jLabel1");
        jLabel2 = new JLabel("jLabel2");
        jPopupMenu1.add(jMenuItem1);
        jTabbedPane1.addTab(null, jLabel1);
        jTabbedPane1.addTab(null, jLabel2);
        getContentPane().add(jTabbedPane1, BorderLayout.CENTER);
        int tabCount = jTabbedPane1.getTabCount();
        for (int i = 0; i < tabCount; i++) {
            JLabel jLabel = new JLabel("Testing the tab" + (i + 1));
            jTabbedPane1.setTabComponentAt(i, jLabel);
            jLabel.setName(String.valueOf(i));
            jLabel.setComponentPopupMenu(jPopupMenu1);
        }
        jPopupMenu1.addPopupMenuListener(new PopupMenuListener() {

            @Override
            public void popupMenuCanceled(final PopupMenuEvent evt) {
            }

            @Override
            public void popupMenuWillBecomeInvisible(final PopupMenuEvent evt) {
            }

            @Override
            public void popupMenuWillBecomeVisible(final PopupMenuEvent evt) {
                JPopupMenu source = (JPopupMenu) evt.getSource();
                JLabel invoker = (JLabel) source.getInvoker();
                JLabel component = (JLabel) jTabbedPane1.getComponentAt(Integer.parseInt(invoker.getName()));
                jMenuItem1.setText(invoker.getText() + ":  " + component.getText());
            }
        });
    }

    public static void main(final String args[]) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TabPopupDemo().setVisible(true);
            }
        });
    }
}
person mKorbel    schedule 14.03.2012
comment
повествование? Типичная вкладка не хватает длины для такой штуковины :-) - person kleopatra; 14.03.2012
comment
@kleopatra вы правы, спасибо, правда в том, что .... в большинстве случаев я использую номенклатуру, которой нет в этом слове - person mKorbel; 14.03.2012