JComponent,setEnabled()函数仅在第一次调用时才能正常工作

时间:2014-06-13 19:58:18

标签: java swing jpanel jcombobox jradiobutton

我已经设置了一个JPanel,可以导航到,远离,然后返回任意次。

这个JPanel上面有两个JRadioButtons,里面有一个包含不同数量的JComboBox的JScrollPane。我编写了它,以便在选择一个JRadioButton时启用JScrollPane和JComboBoxed,当按下另一个时,它们将被禁用:

private void automaticActionPerformed(java.awt.event.ActionEvent evt) {                                                 
        enableDisable();
        check();
    }                                                

private void manualActionPerformed(java.awt.event.ActionEvent evt) {                                              
        enableDisable();
        check();
}   

private void enableDisable() {

        boolean manual = manual.isSelected();
        JPanel.setEnabled(manual);

        for (LabelComboPair pair :labelsAndCombos){
            pair.label.setEnabled(manual);
            pair.combo.setEnabled(manual);
        }


}

public void aboutToDisplayPanel() {
    ...
    ...
    ...
    enableDisable();

}

这项工作在我第一次导航到屏幕时工作正常但是当我离开屏幕然后返回到它时,这不能按预期工作。例如,如果选择“手动”JRadioButton,当我导航回页面时启用JScrollPanes和JComboBox,单击“自动”JRadioButton不会禁用它们,反之亦然。如果我在返回到屏幕后双击JRadioButtons后,JScrollPanel和JComboButtons似乎正确启用或禁用,但是当我点击它们时实际情况并非如此。

之前有没有人见过这个问题,或者对如何解决这个问题有任何建议?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我找到了解决这个问题的方法。

问题是我在错误的地方创建了labelsAndCombos对象。我正在创建这个对象,它是aboutToDisplayPanel()函数中的组件,因此每次导航回屏幕时都会重新创建它。这意味着enableDisable()函数仍然链接到以前的labelsAndCombos对象,而不是创建的新对象,这是我的问题的原因。

我通过在initComponents()函数中创建labelsAndCombos对象来修复此问题。