ユーザーがコンボボックスで選択した項目を変更したときに、ボタンの状態(有効化/無効化)を更新するにはどうすればよいですか?
ボタンにはコンボボックスへの参照がありますが、コンボボックスはボタンについて何も知りません。
ボタンにコンボボックスへの参照がある場合、ボタンは、ボタンの状態を変更できるコンボボックスにアクションリスナーを登録できます。
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 );
}
} );
コンボボックスはボタンについて知る必要はありません。次のようなコンボボックスイベントにリスナーを追加する必要があります。
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);
}
. . .
}
は、JButton
に独自のものを追加するだけActionListener
で、コンボボックスの選択した項目に応じての状態を変更できます。JComboBox
ActionListener
JButton
私は以前、ボタンの有効化または無効化がテキストフィールドへの入力とコンボボックスの項目の選択に依存するコードを作成しました。ここで役立つかもしれません。
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);
}
}
コンボボックスが選択され、テキストフィールドが入力されると、ボタンが有効になります。それ以外の場合は有効になりません。