2014-09-20 180 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