目前,我正在开发一个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);
}
}
答案 0 :(得分:3)
如果您使用JCheckBox
,则有boolean isSelected()
方法,以便验证是否已选择JCheckBox
,您可以尝试:
if (checkbox.isSelected()) {
// selected, do something...
} else {
// un-selected, do something else...
}
答案 1 :(得分:2)
您想要根据所选对象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...
};
}
})
答案 2 :(得分:1)
您的问题提出了一些您可能没有想过的问题。
首先,依靠MouseEvent,当复选框由于某些其他原因(例如,通过代码,或者如果用户使用键盘更改选择)更改状态时,您将不会捕获这些时间。添加ItemListener将是更多代方法。
将来可能会有其他一些影响价格的因素。拥有更新隐藏在此复选框侦听器中的价格的代码似乎是错误的方法。更好的是添加一个只调用常规的监听器"更新显示的价格"方法。在该方法中,您可以检查将影响最终价格的每个小部件的状态并进行相应计算。然后,如果复选框被隐藏或被隐藏,则无关紧要,因为每次要求更新时,它都会从头开始计算总数。
最后,请记住Swing不是线程安全的。虽然单个线程会呼叫您的听众,但无法保证只有一个线程会调用您的"重新计算价格"方法。确保如果多个线程同时调用您的代码,您最终不会让您的状态不同步。避免使用"复选框已切换,因此添加或减去"逻辑是一个好主意,因为它增加了需要保持同步的额外状态。