Java JTabbedPane和stateChanged事件,getTabCount()有错误吗?

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。这是可能的,还是有更好的

我不是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);