我在表单上有一个JCheckbox,我试图获取并放入数据库的值。这只是代码的一个片段,但如果它还不够,我可以继续发布整个课程(尽管它很大而且很混乱,但我会看到我们如何去)
// 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,即使我选中了复选框。有什么想法吗?
答案 0 :(得分:2)
你永远不会检查featureCheck的状态里面 ActionListener,而是在代码创建的监听器之前,在用户有机会检查它之前。相反,在ActionListener内部,您将检查布尔变量featuresCheck的状态,并且当复选框的状态发生变化时,其状态不会神奇地改变。解决此问题:检查需要其值的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
}
}
}