我不是Java开发人员,但我尝试使用Netbeans 8.0.1和java 1.8.0_05作为向导应用程序。 我在项目中添加了一个JTabbedPane(带有5个选项卡)并关联了一个stateChanged事件来启用或禁用两个按钮:" next"和" prev"。
private void tabbedPaneStateChanged(javax.swing.event.ChangeEvent evt)
{
bttPrev.setEnabled(tabbedPane.getSelectedIndex() > 0);
bttNext.setEnabled(tabbedPane.getSelectedIndex() < (tabbedPane.getTabCount() - 1));
}
当我运行应用程序时,两个按钮都被禁用。在调试中我注意到了:
tabbedPane.getSelectedIndex() = 0
tabbedPane.getTabCount() = 1 ==> should be 5!!!!
当然,0 = 1 - 1然后bttNext被禁用。但是为什么tabbedPane.getTabCount = 1应该是5?如果我更改标签,它返回5正常工作。 我不明白这是否是java 1.8中的本机错误。这是可能的,还是有一个更好,更合理的解释,我没有抓住?
答案 0 :(得分:3)
我认为问题是netbeans在添加面板之前将状态更改添加到tabbedpane。可能是因为这个问题。
如果你在initcomponent()
方法之后放了sout,
//initComponents();
System.out.println("init");
。你会看到put as,
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
将这2行添加到班级的指导者
initComponents();//add following lines after this line
tabbedPane.setSelectedIndex(1);
tabbedPane.setSelectedIndex(0);