2014-09-20 2 views
1

У меня есть JCheckbox на форме, которую я пытаюсь использовать и помещать в базу данных. Это всего лишь фрагмент кода, но если этого недостаточно, я могу просто пойти вперед и опубликовать весь класс (он большой и грязный, хотя, но я посмотрю, как мы пойдем).JCheckBox возвращает false, когда выбрано

// Create checkbox 
JCheckBox featuredCB = new JCheckBox(); 
    topPanel.add(featuredCB); 

//Take the value of it and put it in featuredCheck value 
boolean featuredCheck = featuredCB.isSelected(); 
    System.out.println(featuredCheck); 

submitBT.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent event) 
     { 
      if(event.getSource() == submitBT) 
      { 
       idContent.setUser(userTF.getText()); 
       idContent.setMovie(titleTF.getText()); 
       idContent.setFeatured(featuredCheck); 
       idContent.setRating(Integer.parseInt(ratingTF.getText())); 


       if(owner.updateReview(isUpdate, idContent)) 
       { 
        // success 
        try { 
         MovieReviewDSC.add(idContent); 
        } catch (Exception e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 
       else 
       { 
        // fail 

       } 
      } 

     } 

Есть некоторые другие вещи там он принимает и проходит через очень хорошо, и эта информация отображается в базе данных и показывается как незарегистрированный в моей таблице модели, а также.

Но я положил строку System.out.println(featuredCheck);, чтобы проверить ее, и каждый раз, когда я запускаю ее, она выводит false, даже если я установил флажок. Есть идеи?

ответ

2

Вы никогда не проверяете состояние featuredCheck внутри ActionListener, но скорее перед слушателем при создании кода, прежде чем у пользователя была возможность проверить его. Вместо этого внутри ActionListener вы проверяете состояние логической переменной, featuredCheck, и ее состояние не изменится при изменении состояния флажка. Исправьте это: проверьте состояние JCheckBox (а не логическую переменную), где требуется его значение.

так .......

//!! boolean featuredCheck = featuredCB.isSelected(); // ***** get rid of this variable 

submitBT.addActionListener(new ActionListener() 
{ 
    public void actionPerformed(ActionEvent event) 
    { 
     if(event.getSource() == submitBT) 
     { 
      idContent.setUser(userTF.getText()); 
      idContent.setMovie(titleTF.getText()); 

      // !!! idContent.setFeatured(featuredCheck); // **** no ***** 
      idContent.setFeatured(featuredCB.isSelected();); // *****yes **** 

      idContent.setRating(Integer.parseInt(ratingTF.getText())); 
      if(owner.updateReview(isUpdate, idContent)) 
      { 
       // success 
       try { 
        MovieReviewDSC.add(idContent); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } else 
      { 
       // fail 
      } 
     } 
    } 
+0

Отлично, это работает, спасибо много! Я все еще узнаю о actionListeners, и что вы можете и чего не можете сделать в них, поэтому я ценю объяснение. – user3690863

+0

@ user3690863: он фактически имеет мало общего с ActionListener, и все зависит от вашей логической переменной, которая не изменяется при изменении JCheckBox. Вы можете исправить эту проблему, если вам абсолютно необходимо логическое значение, добавив ItemListener в JCheckBox и изменив логическое значение в этом прослушивателе. –

+0

О, хорошо, я буду держать itemListener в уме, я думаю, что мне нужно это для некоторых переключателей, которые у меня есть. Я не думаю, что мне нужно это для этой конкретной проблемы, так как мне действительно нужно знать, выбрано ли поле или нет, когда нажата кнопка отправки. Благодаря! – user3690863

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