如果在 java 中取消选中复选框,如何编码



目前,我正在用java开发一个餐厅管理系统。 当我选中一个复选框时,它会在总金额中增加钱,我想知道的是,如果我再次取消选中该复选框,那么它将再次减去该添加的金额。 以下是我的复选框代码

private void jcbWPizzaMouseClicked(java.awt.event.MouseEvent evt) {                                       
double cMeal = Double.parseDouble(jlblCostOfMeal.getText());
double WavePizza = Double.parseDouble(jtxtWP.getText());
double iWavePizza = 350;
if (jcbWPizza.isSelected()) {
i[1] = (WavePizza * iWavePizza) + cMeal;
String pMeal = String.format("%.2f", i[1]);
jlblCostOfMeal.setText(pMeal);
}
} 

如果您正在使用JCheckBoxboolean isSelected()一种方法,因此要验证是否选择了JCheckBox,您可以尝试:

if (checkbox.isSelected()) {
// selected, do something...
} else {
// un-selected, do something else...
}

您希望根据对象 jcbWPizza 的选定声明更改总金额的值。 您可以将 ItemListener 添加到复选框

jcbWPizza.addItemListener(new ItemListener() {
@Override public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
//checkbox has been selected //do selected action... 
} else {
//checkbox has been deselected //do deselected action...   
};
}
})

您的问题提出了许多您可能没有想到的问题。

首先,通过依赖 MouseEvent,您将无法捕获由于某些其他原因(例如,通过代码或用户使用键盘更改选择)而更改状态的时间。 添加 ItemListener 将是一种更生成的方法。

将来,可能会有许多其他因素影响价格。 将更新价格的代码隐藏在此复选框侦听器中似乎是错误的方法。 更好的方法是添加一个侦听器,该侦听器仅调用通用的"更新显示的价格"方法。 在该方法中,您可以检查将影响最终价格的每个小部件的状态并相应地进行计算。 然后,复选框是否被隐藏并不重要,因为每次要求更新时,它都会从头开始计算总数。

最后,请记住,Swing 不是线程安全的。 虽然单个线程会调用您的听众,但不能保证只有一个线程会调用您的"重新计算价格"方法。 确保如果多个线程应同时调用您的代码,您最终不会使状态不同步。 避免"复选框已切换,因此添加或减去"逻辑再次是一个好主意,因为它增加了需要保持同步的其他状态。

最新更新