2012-06-21 3 views
0

Так вот что я пытаюсь сделать. Если пользователь выбирает элемент в JComboBox1, я хочу, чтобы его можно было отключить JComboBox2. Но только если они выбирают "Unavailable". Я прочитал материал о action listeners и так далее, но есть просто способ для меня, чтобы использовать, как если утверждение: Вот то, что я думал:Отключить JComboBox, основанную на элементе другого ComboBox

if (jComboBox1.getSelectedItem().equals("Unavailable") == true) { 
     jComboBox2.setEnabled(false); 
} 

ответ

1

Это было бы, конечно, работать, но вы должны периодически вызывайте этот фрагмент кода. Гораздо лучше было бы использовать ActionListener - это определенно поможет вам в будущем. Вы должны создать класс, который реализует ActionListener, такие как

//This class should be a private class inside the class which holds the JComboBoxes. 
private class DisableActionListener implements ActionListener { 

    public void actionPerformed(ActionEvent e) { 
     JComboBox cb = (JComboBox)e.getSource(); 
     if (cb.getSelectedItem().equals("Unavailable")) { 
      jComboBox2.setEnabled(false); 
     } 
    } 
} 

Для этого, чтобы работать, вы должны прикрепить ActionListener к первому JComboBox - ActionListener не хорошо само по себе! Для этого используйте метод addActionListener() в JComboBox, добавив экземпляр этого вновь созданного класса.

Теперь рассекать код:

private class DisableActionListener implements ActionListener 

Здесь мы создаем класс, который реализует интерфейс ActionListener. При этом мы создаем собственную модель ActionListener. Когда вы реализуете интерфейс, вы должны переопределить все методы интерфейса, поэтому нам нужно переопределить стандартный метод actionPerformed (ActionEvent e) на интерфейсе. Этот метод будет вызываться всякий раз, когда вы выберете или отмените выбор элемента (будет отправлен ActionEvent); поэтому вы должны поставить логику того, что вы хотите осуществить внутри этого метода.

JComboBox cb = (JComboBox)e.getSource(); 

Каждый ActionEvent, который вызывает метод actionPerformed() называться будет содержать дополнительные данные. Одна из частей данных является источником ActionEvent - что сделало это действие? В этом случае мы знаем, что источником является JComboBox, поскольку мы привязываем ActionListener к JComboBox, поэтому мы можем передать источник ActionEvent, который является объектом, в JComboBox, который отправил событие.

В остальном это если логика вы написали сами, с синтаксической ошибки исправлено:

Вы писали

(jComboBox1.getSelectedItem().equals("Unavailable") == true), 

но равно() метод на шпагат уже возвращает истину, так что (= = true) - это ненужная избыточность. В вашем случае вы в основном получаете (true = true).

В любом случае, надеюсь, что это поможет!

Смежные вопросы