我正在做一个特定的应用程序,只是一个基本的文本编辑器,我记得我有标签和JMenu,所以如果你去了文件 - >新增它将在JTabbedPane上添加或“打开”另一个选项卡。但这一次它不是为我做的,有人可以帮忙吗?以下是我如何做到这一点:
newFile.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent event){
tabs.addTab("new file", text);
}
}
);
因此,当它被点击时,它应该添加另一个标签,但它不是出于某种原因......
如果重要的话,开头就会打开一个默认选项卡,当你点击新标签时,它会清除掉旧选项卡。
谢谢你的帮助! (请询问您是否需要更多解释)
在这里,我上传了我的代码,因为这里的编辑一直在说我的方式我没有正确地格式化它:
http://nardcake.com/java
那里有2个文件,一个初始化它,另一个是其他所有文件
谢谢!
答案 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更新代码时,您可能会搞砸订单并获得不必要的视觉外观。