Java JTabbedPane无法添加多个选项卡?

标签 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个文件,一个是初始化的,另一个是其他的 谢谢!

最佳答案

<罢工> 尝试:

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我自己:

Every usage of Swing components must be done thorugh the Event Dispatch Thread (abbreviated EDT) or you will probably get unwanted visual effects. See here for explanation.

编辑:

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

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

如果它打印 true,那么您可以安全地进行 GUI 更新(例如,调用 Swing 组件实例上的方法) - 就像 1 中或 EBLFWE 类中的任何位置一样。然而 2 将打印 false - 这是因为 thread 运行您的程序不是 EDT。

调用SwingUtilities.invokeLater()时您实际上是将要执行的代码(在 EDT 认为合适的某个适当时间)放置在事件调度线程中。

EDT 执行实际的绘制以及许多其他任务,因此当您从另一个 thread 调用 GUI 更新代码时您可能会打乱顺序并获得不需要的视觉外观。

关于Java JTabbedPane无法添加多个选项卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12876889/

相关文章:

java - JComboBox.remove 不工作

java - 使用 JNI 通过 std::ostream 从 C++ 获取文本数据到 Java

java - 等待线程是否重新访问同步方法中的代码

java - URLRewrite 过滤器不适用于多部分表单

java - 删除 JTable 中选定的列表元素

java - 在 JPanel 中运行 Java 程序

android - 如何更新 Canvas 绘制文本而不是重绘 Canvas

regex - 从大文件 (~1G) 中删除模式

java - Delphi 使用 Android Jni 包装器中的过程

java - 如何在 testcontainers execInContainer 方法中通过管道传输命令