странный результат (код обработки событий Java) - PullRequest
0 голосов
/ 12 октября 2010
public void itemStateChanged(ItemEvent event)
{
    if(event.getSource() == doctorBox)
    {
        if (doctorBox.isSelected() == true)
            JOptionPane.showMessageDialog(null, "you are a doctor");
        else if (doctorBox.isSelected() != true)
            JOptionPane.showMessageDialog(null, "you are not a doctor");
    }
}

при запуске приложения ... флажок по умолчанию снят, когда я проверяю «doctorBox» ... У меня появляется два диалоговых окна: «Вы доктор» и «Вы недоктор ", также флажок не проверяется!

почему это происходит?как изменить код для правильной работы?

Ответы [ 2 ]

1 голос
/ 12 октября 2010

Пара вещей, которые помогут вам

для вашей логики, так как вы знаете, что выбор включен или выключен, попробуйте следующее

if(doctorBox.isSelected())
  //do something
else
  //do something else

если флажок не установлен, измените его с ItemListener на ActionListener.

private class aListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            if(e.getSource() == doctorBox){
                if(doctorBox.isSelected())
                     JOptionPane.showMessageDialog(null, "you are a doctor");
                else {
                     JOptionPane.showMessageDialog(null, "you are not a doctor");
                }
            }   
        }
    }

Если вы посмотрите на текущий код и пройдете по нему с помощью отладки, вы увидите, что ваш ItemListener запускается 2 раза. Первый раз это проверяет, второй раз это снимает. Все в один клик. Я не могу объяснить внутреннюю работу itemListener в этом случае. ActionListener работает намного лучше

1 голос
/ 12 октября 2010

Вот несколько замечательных образцов . Удалите все CheckBox, кроме одного, и убедитесь, что у вас есть один прослушиватель для одного CheckBox в соответствии с деталями по предоставленной ссылке. Я предполагаю, что есть странность, происходящая из-за способа, которым слушатели были добавлены вместе с CheckBoxes.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...