Java JTabbedPane无法添加多个标签?

时间:2012-10-13 20:52:05

标签: java swing text actionlistener jtabbedpane

我正在做一个特定的应用程序,只是一个基本的文本编辑器,我记得我有标签和JMenu,所以如果你去了文件 - >新增它将在JTabbedPane上添加或“打开”另一个选项卡。但这一次它不是为我做的,有人可以帮忙吗?以下是我如何做到这一点:

newFile.addActionListener(
                new ActionListener(){
                    public void actionPerformed(ActionEvent event){
                        tabs.addTab("new file", text);
                    }
                }
        );

因此,当它被点击时,它应该添加另一个标签,但它不是出于某种原因...... 如果重要的话,开头就会打开一个默认选项卡,当你点击新标签时,它会清除掉旧选项卡。 谢谢你的帮助! (请询问您是否需要更多解释) 在这里,我上传了我的代码,因为这里的编辑一直在说我的方式我没有正确地格式化它:
http://nardcake.com/java
那里有2个文件,一个初始化它,另一个是其他所有文件 谢谢!

1 个答案:

答案 0 :(得分:2)

<击> 尝试:

tabs.revalidate();
tabs.repaint();

<击>

我已经删除了这两行(最后通过addTab()方法调用了这两行),并重写了你的init.java:

 public static void main(String[] args) {
 System.out.println(SwingUtilities.isEventDispatchThread()); // 1
 SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            System.out.println(SwingUtilities.isEventDispatchThread()); //2
            EBLFWE window = new EBLFWE();
            window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            window.setExtendedState( window.getExtendedState()|JFrame.MAXIMIZED_BOTH );
            window.setSize(1024, 728);
            window.setVisible(true);
        }
    });

现在有效。致quote我自己:

  

Swing组件的每次使用必须通过Event Dispatch Thread(缩写为EDT)完成,否则您可能会得到不需要的视觉效果。有关说明,请参阅here

编辑:

所有与GUI相关的代码必须在EDT上执行。您可以测试代码的某些部分是否 EDT运行,如下所示:

 System.out.println(SwingUtilities.isEventDispatchThread());

如果它打印为true,则可以安全地进行GUI更新(例如,在Swing组件实例上调用方法) - 例如在EBLFWE类中的1或任何位置。但是2会打印错误 - 这是因为运行的<{3}} 您的程序不是 EDT。

当调用thread时,你实际上是在事件发送线程中放置要执行的代码(在EDT认为合适的适当时间)。

EDT执行实际绘画以及许多其他任务,因此当您从另一个SwingUtilities.invokeLater()调用GUI更新代码时,您可能会搞砸订单并获得不必要的视觉外观。