2

当用户更改组合框中的选定项目时,如何更新按钮的状态(启用/禁用)?

该按钮具有对组合框的引用,但组合框对按钮一无所知。

4

4 回答 4

2

如果按钮具有对组合框的引用,则该按钮可以在组合框中注册一个动作侦听器,您可以在其中更改按钮的状态。

final JButton button = new JButton();
final JComboBox comboBox = new JComboBox();

comboBox.addActionListener( new ActionListener() {
    @Override
    public void actionPerformed( final ActionEvent event ) {
        // Your logic to determine when to enable/disable:
        final boolean enabled = comboBox.getSelectedIndex() == 0;
        button.setEnabled( enabled );
    }
} );
于 2012-10-05T11:33:53.063 回答
2

组合框不需要知道按钮。您需要向组合框事件添加一个侦听器,如下所示:

public class ComboBoxDemo ... implements ActionListener {
. . .
    petList.addActionListener(this) {
. . .
public void actionPerformed(ActionEvent e) {
    JComboBox cb = (JComboBox)e.getSource();
    String petName = (String)cb.getSelectedItem();
    yourButton.setEnabled(true/false);
}
. . .

}

于 2012-10-05T11:34:54.357 回答
1

可以简单地在和 中JButton添加自己的,然后您可以根据组合框的选定项更改 的状态。ActionListenerJComboBoxActionListenerJButton

于 2012-10-05T11:34:14.993 回答
1

我以前编写过代码,其中启用或禁用按钮取决于填充文本字段并一起选择组合框的项目。在这里可能会有所帮助。

jComboBox.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                jComboBoxActionPerformed(e);
            }
        });
...
jTextField.getDocument().addDocumentListener(new DocumentListener() {
            public void insertUpdate(DocumentEvent e) {
                jTextFieldDocumentListener(e);
            }
            public void removeUpdate(DocumentEvent e) {
                jTextFieldDocumentListener(e);
            }
            public void changedUpdate(DocumentEvent e) {
                jTextFieldDocumentListener(e);
            }
        });
        jTextField.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                jTextFieldActionPerformed(e);
            }
        });
...

private void jComboBoxActionPerformed(ActionEvent e){
        if(jComboBox.getSelectedIndex() == -1)
            jButton.setEnabled(false);
        else if(!jTextField.getText().equals(""))
            jButton.setEnabled(true);
    }
private void jTextFieldDocumentListener(DocumentEvent e){
        if(jTextField.getText().equals("") || jComboBox.getSelectedIndex() == -1){
            jButton.setEnabled(false);
        }
        else{
            jButton.setEnabled(true);
        }
    }

    private void jTextFieldActionPerformed(ActionEvent e){

        if(jTextField.getText().equals("")){
            jButton.setEnabled(false);
        }
        if(!(jTextField.getText().equals(""))){
            jButton.setEnabled(true);
        }
    }

如果选择了组合框并填充了文本字段,则将启用该按钮。否则不会启用。

于 2015-05-05T18:57:45.050 回答