2012-10-05 30 views
1

当用户更改组合框中的选定项目时,如何更新我的按钮的状态(启用/禁用)。启用/禁用与组合框有关的Java swing按钮

该按钮有对组合框的引用,但组合框不知道该按钮的任何内容。

+0

将情景视图(又名:让按钮有对组合的引用)是不好的做法。相反,使用JButton设置的Action来解耦:组合框选择更改的监听器知道该Action,并根据需要切换其启用。内部关心如何相应地更新按钮。 – kleopatra

回答

1

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

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

感谢它的工作。 @Kleopatra 这肯定是一个不好的习惯,但我没有选择,我想我的按钮也听一个Jtable,所以我不能在Tollbar的类 – Vniversum

+0

@ user1722605里面定义它。 。你只是坚持要把它做成不好的方式;-)越多(查看)合作者参与其中,解耦就越重要。 – kleopatra

1

JButton可以简单地添加在JComboBox自己的ActionListener并在ActionListener然后你可以根据组合框的选择项改变JButton的状态。

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

}

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

如果选择组合框和文本字段被填满,则该按钮将被启用。否则它不会被启用。