java 激活和停用 ComboBox

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/2552520/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-29 21:45:08  来源:igfitidea点击:

activate and deactivate ComboBox

javaswingcomboboxcheckbox

提问by Jessy

How can I make the comboBox available when the checkBox was uncheck (vice versa)

取消选中复选框时如何使组合框可用(反之亦然)

Why the comboBox is still disable after I unChecked the checkBox?

为什么取消选中复选框后组合框仍处于禁用状态?

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);
}

回答by ninesided

If I understand you correctly I think all that you need to do is to change the enabled state of the combo box based on the current value of the checkbox:

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

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

回答by Pureferret

I have a similar set up, and I use an Item Listener, like so:

我有一个类似的设置,我使用了一个项目监听器,如下所示:

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);
        }
    }
});

This way the behaviour is different when selected and deselected.

这样,选择和取消选择时的行为是不同的。

回答by Evertvd

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);
        }
    }

回答by raj

I treid this and worked..

我试过这个并工作了..

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);
 }
}

Your old code didn't work because, even unchecking a checkbox triggers the event. The source of the trigger is the checkbox.. so both while checking and unchecking the event source was chk

您的旧代码不起作用,因为即使取消选中复选框也会触发事件。触发器的来源是复选框..所以在检查和取消选中事件源时都是chk