2016-12-15 13 views
0

В настоящее время я сталкиваюсь с проблемой, когда я могу добавить флажок на экран, и при нажатии он меняет местами между состояниями по мере необходимости, но когда дело доходит до использования данных выбора, чтобы делать что-то, он всегда возвращает исходное значение, будь то true или false;JCheckBox всегда возвращает True/False, но не меняет

Мой первый фрагмент кода использовался только с помощью isSelected(); метод внутри оператора if, который постоянно запускается каждый тик. SVelRand мой флажок, который я создаю с помощью:

SVelRand = new JCheckBox("Random", true); 
    SVelRand.setBounds(50, 30, 90, 20); 

Затем код проверки, как показано ниже:

boolean sel = SVelRand.isSelected(); 

    if(sel){ 

     System.out.print("Selected"); 

    }else{ 

     System.out.print("Not Selected"); 


    } 

Когда я нашел, что это не работает, я пытался реализовать пункт слушателя под где я создаю jcheckbox, но он по-прежнему продолжает возвращать исходное значение.

SVelRand.addItemListener(new ItemListener() { 
      public void itemStateChanged(ItemEvent e) { 
      System.out.println(SVelRand.isSelected()); 
      } 
     }); 

Я также рисунок этикетки и JTextField к той же панели перед добавлением его к раме упаковывают, что имеет какие-либо подшипники. И причина, по которой я использую setBounds, а не макет, - это то, что я могу добавить каждый компонент в точные местоположения для достижения нестандартного макета.

Любая помощь будет оценена по достоинству;

ответ

-1

В вашем действии функции слушателя просто следить в (области видимости класса) булево

// way up above everything 
public boolean toggleState=false; 

// then later 
SVelRand.addItemListener(new ItemListener() { 
public void itemStateChanged(ItemEvent e) { 
    this.toggleState=(!this.toggleState); 
    String message=(this.toggleState) ? "checked" : "unchecked"; 
    System.out.println("Checkbox is "+message); 
} 
}); 

Если вы начинаете свой флажок, как установлен по умолчанию, просто измените начальное значение toggleState истинного

+0

Спасибо Кучи, теперь он отлично работает. Все еще запутал меня, почему встроенный метод не работал, но я собираюсь придерживаться этого метода. – user1690395

+0

Почему поле? Вы вводите дополнительную ненужную сложность. Почему бы не проверить состояние, хранящееся в объекте ItemEvent, так как он содержит необходимую информацию? 'if (e.getStateChange() == ItemEvent.SELECTED)' все, что необходимо –