2014-09-20 79 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);行来测试它,每次我运行它,它打印假即使我检查复选框。有任何想法吗?

回答

2

在用户有机会检查它之前,您从不检查特性检查的状态内部的 ActionListener,而是在代码创建的侦听器之前。相反,在ActionListener内部,你正在检查一个布尔变量的状态,特性检查,并且当复选框的状态改变时,它的状态不会奇迹般地改变。解决这个问题:检查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 2014-09-20 12:12:01

+0

@ user3690863:它实际上与ActionListener几乎没有关系,并且如果JCheckBox发生更改,所有与您的布尔变量不会发生更改的操作无关。如果您绝对需要布尔值,可以通过向JCheckBox添加ItemListener并更改该侦听器中的布尔值来解决此问题。 – 2014-09-20 14:49:06

+0

噢好吧,我会记住itemListener,我想我需要它来做一些单选按钮。我不认为我需要这个特殊问题,因为当点击提交按钮时,我只需要知道该框是否被选中。谢谢! – user3690863 2014-09-20 22:58:56