Java JTabbedPane和stateChanged事件,getTabCount()有错误吗?
我不是java开发人员,但我正在尝试将Netbeans 8.0.1和java 1.8.005用于向导应用程序。 我在我的项目中添加了一个JTabbedPane(有5个选项卡),并关联了一个stateChanged事件来启用或禁用两个按钮:“next”和“prev” 当然,如果0=1-1,那么bttNext被禁用。但是为什么tabbedPane.getTabCount=1而它应该是5呢?如果我改变标签,它可以正常工作返回5。 我不明白这是否是来自Java1.8的本机bug。这是可能的,还是有更好的、合乎逻辑的解释我没有理解Java JTabbedPane和stateChanged事件,getTabCount()有错误吗?,java,netbeans,Java,Netbeans,我不是java开发人员,但我正在尝试将Netbeans 8.0.1和java 1.8.005用于向导应用程序。 我在我的项目中添加了一个JTabbedPane(有5个选项卡),并关联了一个stateChanged事件来启用或禁用两个按钮:“next”和“prev” 当然,如果0=1-1,那么bttNext被禁用。但是为什么tabbedPane.getTabCount=1而它应该是5呢?如果我改变标签,它可以正常工作返回5。 我不明白这是否是来自Java1.8的本机bug。这是可能的,还是有更好的
我认为问题在于netbeans在添加面板之前将状态更改添加到选项卡窗格。这可能是问题的原因 如果将sout放在
initcomponent()方法之后
//initComponents();
System.out.println("init");
.你会看到
1
init
所以很明显,状态事件是在执行init组件方法时触发的,可能是在选项卡添加到窗格时触发的
你能做什么
在添加3个面板之后而不是之前添加statechange事件
tabbedPane.addTab("lastpanel", jPanel5);
// add statechange event after adding 3 panels
tabbedPane.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
tabbedPaneStateChanged(evt);
}
});
另一个简单的解决方案//效果良好
在构造函数处更改状态twise
将这两行代码添加到类的构造函数中
initComponents();//add following lines after this line
tabbedPane.setSelectedIndex(1);
tabbedPane.setSelectedIndex(0);
你确定吗?请再次检查,方法是放入System.out.println(getTabCount());是的,我是。请看一下我刚才添加的打印屏幕。第一行是在我运行应用程序时打印的。下一个,当标签改变时,使用下一个和上一个按钮。你是对的!!!问题在于Netbeans及其自动生成的代码:它在statechange事件声明和init之后添加选项卡。我已经实现了第二个解决方案,它很有效。非常感谢。
tabbedPane.addTab("lastpanel", jPanel5);
// add statechange event after adding 3 panels
tabbedPane.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
tabbedPaneStateChanged(evt);
}
});
initComponents();//add following lines after this line
tabbedPane.setSelectedIndex(1);
tabbedPane.setSelectedIndex(0);