2014-12-07 63 views
0

它是我第一次编程复选框;我想出了如何使复选框出现,并在选中时执行一个命令。但是,如果取消选中此框,而不是撤消该命令,则会再次执行此命令。如何取消选中该框时撤消该命令?取消选中复选框不会撤消命令吗?

代码:(复选框的实例)

negA = new JCheckBox("Neg"); 
    negA.addActionListener(this); 
    negA.setActionCommand("A-5"); 

    tossupA = new JCheckBox("Tossup"); 
    tossupA.addActionListener(this); 
    tossupA.setActionCommand("A10"); 

    powerA = new JCheckBox("Power"); 
    powerA.addActionListener(this); 
    powerA.setActionCommand("A05"); 

命令:

public void actionPerformed(ActionEvent e) 
    { 
    //get the String value from the button pressed 
    String result = e.getActionCommand(); 
    char team = result.charAt(0); 

    //set text on screen to reflect new score 
    String screenText = "Team "+(team)+"'s total score for this tossup: "; 

    //add score to subtotal and show on screentext 
    if(team=='A'){ 
     teamATempScore += Integer.parseInt(result.substring(1)); 
     screenText += teamATempScore; 
    } 
    //and now for B 
    else if(team=='B'){ 
     teamBTempScore += Integer.parseInt(result.substring(1)); 
     screenText += teamBTempScore; 
    } 

如果没有选中该复选框,我想得分,这是递增的数量递减,而是在得分只是增量再次:(

谢谢!

(是的,如果你想知道,这是一个Quizbowl游戏的记分程序):D

回答

1

监听器只是检查checkBox是否被点击 - 它不检查它是否从未选中到检查,反之亦然。

使用.isSelected()方法确定复选框是否在点击后被选中。

例如:

if (negA.isSelected()) 
{ 
     //the checkbox was checked after they clicked it, do something 
} 
else 
{ 
     //the checkbox was unchecked after they clicked it, do something else 
} 
+0

好的,谢谢!但是,如果这个复选框被忽略,这会导致'else'运行吗?例如,在检查时它会使得分数增加-5(减少5),并且在检查后不检查时减少-5,但是如果从一开始就没有检查,它会减少-5吗? – Tony 2014-12-07 19:25:23

+0

我不确定我完全理解你的问题。如果该复选框被忽略,则意味着用户从未点击过它。由于他们从不点击它,actionListener将不会听到它,并且不会执行改变分数的代码部分。 – tlukechess 2014-12-07 19:46:55

+0

啊,我明白你的意思了。我以为你打算把它放在别的地方。问题解决了。谢谢! – Tony 2014-12-07 20:27:21

0

你必须检查控件的状态,然后增加或减少。编译器不能自动生成代码的反转。

要检查复选框的状态,请像下面的示例一样调用isSelected()方法。

import javax.swing.JOptionPane; 

public class CheckboxExample extends javax.swing.JFrame { 

    private javax.swing.JCheckBox jCheckBox1; 

    public CheckboxExample() { 
     jCheckBox1 = new javax.swing.JCheckBox(); 
     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
     getContentPane().setLayout(new java.awt.FlowLayout()); 

     jCheckBox1.setText("CheckMe"); 
     jCheckBox1.addActionListener(new java.awt.event.ActionListener() { 
      @Override 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       jCheckBox1ActionPerformed(evt); 
      } 
     }); 
     getContentPane().add(jCheckBox1); 

     pack(); 
    } 

    // this will get called when the state of the checkbox changes 
    private void jCheckBox1ActionPerformed(java.awt.event.ActionEvent evt) { 
     if(jCheckBox1.isSelected()) { 
      JOptionPane.showMessageDialog(this, "Checked", "Message", 
              JOptionPane.INFORMATION_MESSAGE); 
     } 
     else { 
      JOptionPane.showMessageDialog(this, "Unchecked", "Message", 
              JOptionPane.INFORMATION_MESSAGE); 
     }    
    } 

    public static void main(String args[]) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new CheckboxExample().setVisible(true); 
      } 
     }); 
    } 
} 
+0

对不起,我是小白。那是什么意思?我认为复选框是布尔值?我如何检查一个状态? – Tony 2014-12-07 19:01:53

+0

为你添加的示例@Nyaxoffon – Bill 2014-12-07 22:40:14