激活和停用ComboBox

时间:2010-03-31 11:41:09

标签: java swing combobox checkbox

当取消选中复选框时,如何使comboBox可用(反之亦然)

为什么在unChecked checkBox后comboBox仍然处于禁用状态?

choice [] = {"A","B","C"};
JComboBox a = new JComboBox(choice);

JCheckBox chk = new JCheckBox("choice");

...
a.addActionListener(this);
chk.addActionListener(this);
...

public void actionPerformed(ActionEvent e) {

   //disable the a comboBox when the checkBox chk was checked
  if(e.getSource()==chk)
    a.setEnabled(false);

  //enable the a comboBox when the checkBox chk was unchecked
  else if(e.getSource()!=chk)
    a.setEnabled(true);
}

4 个答案:

答案 0 :(得分:4)

如果我理解正确,我认为您需要做的就是根据复选框的当前值更改组合框的启用状态:

public void actionPerformed(ActionEvent e) {
    if (e.getSource()==chk) {
        a.setEnabled(chk.isSelected());
    } 
}

答案 1 :(得分:2)

我有类似的设置,我使用Item Listener,如下所示:

CheckBox.addItemListener(new ItemListener() {
    public void itemStateChanged(ItemEvent e) {
        if(e.getStateChange()==ItemEvent.SELECTED){
            ComboBox.setEnabled(true);
        }else if(e.getStateChange()==ItemEvent.DESELECTED){
            ComboBox.setSelectedIndex(-1);
            ComboBox.setEnabled(false);
        }
    }
});

这样,选择和取消选择时行为就会有所不同。

答案 2 :(得分:0)

我为此付出了努力..

public class JF extends JFrame implements ActionListener {
 String choice [] = {"A","B","C"};
 JComboBox a = new JComboBox(choice);

 JCheckBox chk = new JCheckBox("choice");

 JF()
 {
  this.add(a, BorderLayout.NORTH);
  this.add(chk, BorderLayout.CENTER);
  setDefaultCloseOperation(EXIT_ON_CLOSE);
  a.addActionListener(this);
  chk.addActionListener(this);
 }

 public void actionPerformed(ActionEvent e) {

    //NOTE THE FOLLOWING LINE!!!!
   if(e.getSource()==chk)
     a.setEnabled(chk.isSelected());
 }
 public static void main(String[] args) {
  new JF().setVisible(true);
 }
}

您的旧代码无效,因为即使取消选中复选框也会触发该事件。触发器的来源是复选框..因此,在检查和取消选中事件源时,chk

答案 3 :(得分:0)

if (e.getSource() == chckbxModificar) {
        if (chckbxModificar.isSelected()) {
            cbxImpuesto.setEnabled(true);
            cbxMoneda.setEnabled(true);
            txtPorcentaje.setEditable(true);
            txtSimbolo.setEditable(true);

        } else {
            cbxImpuesto.setEnabled(false);
            cbxMoneda.setEnabled(false);
            txtPorcentaje.setEditable(false);
            txtSimbolo.setEditable(false);
        }
    }