1

我正在为拼贴做一个项目(比如餐厅),而且我的 Java 不是很好(他们并没有真正尝试教我们)。该项目的原理是显示一条消息,说明我选择了哪些单选按钮和复选框。

我有 5 个单选按钮,它们用于选择一餐,以及 5 个用于选择配菜的复选框。我已经设法让单选按钮工作,但我不知道如何使复选框工作......

这是单选按钮的代码(这适用于所有 5 个):

 private void jRadioButton1ItemStateChanged(java.awt.event.ItemEvent evt) {
if (evt.getSource().equals(jRadioButton1)) { Meal= jRadioButton1.getText(); //Meal is a String }

我为复选框尝试了相同的代码,但它只在消息中显示一个配菜,即使我选择了多个......

显示消息的按钮代码:

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
JOptionPane.showMessageDialog(rootPane, "You have chosen:\n" + String.valueOf(Meal) + "\n" + String.valueOf(SideDish)); }

So basically, if anyone is willing to help, please tell me how to make the check boxes work... that every selected check box is shown in the message, like this:

You have chosen:
Pizza //meal
Ketchup //selected side dish #1
Chilli peppers //selected side dish #2
Feta cheese //selected side dish #3

我希望我的问题很清楚...

4

4 回答 4

3

由于您想为零个或多个复选框显示文本,因此您需要检查每个复选框是否被选中,并连接生成的文本,而不是只保留一个选项。此外,由于复选框可以独立地选中和取消选中,因此最好只在按下按钮时检查它们的状态,而不是一直尝试跟踪它们。例如:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

  SideDish = "";
  if (jCheckBox1.getState()))
  {
    SideDish += jCheckBox1.getText();
  }
  ...
  if (jCheckBox5.getState()))
  {
    SideDish += ", " + jCheckBox5.getText();
  }

  JOptionPane.showMessageDialog(rootPane, "You have chosen:\n" + Meal + "\n" + SideDish);
}

这只是一个插图,它不会总是正确显示分隔逗号 - 我将把修复留给你作为练习:-)

一个更优雅的解决方案是使用字符串集合来收集配菜 - 同样,您可以尝试改进代码。

顺便说一句,您不需要String.valueOf()打印Strings 所以我从上面的代码中删除了它。Java 编码约定是以小写开头的变量/字段名称。

于 2012-06-19T15:49:32.983 回答
2

由于您可以同时选择多个复选框,因此您应该将选中的值收集到一个集合中。 Set<String>想到你只能选择一个配菜一次。

此外,您没有遇到此问题,因为单选按钮的每个选择都会覆盖前一个,但是如果未选中相应的复选框,您将需要从集合中删除项目。

注意Set<>是一个接口,你需要一个实现类来实际使用它。在您的情况下 a会起作用(有关SetHashSetHashSet<>的可用方法,请参阅文档)

当您显示配菜的选择时,您可以枚举集合中的元素,然后将它们一个接一个地打印出来,或者通过连接元素将结果收集到一个字符串中。

注意:如果您可以直接访问复选框,则可能不需要该设置:在显示选择了哪个配菜时,只需检查每个复选框的状态并累积上述选择字符串

于 2012-06-19T15:49:56.127 回答
1

这是一个例子

假设你有 4 个侧边菜

Vector<JCheckBox> boxes = new Vector<JCheckBox>
boxes.add(checkbox1) .... .add(checkbox4);

并单击按钮

Vector<String> sideDishes = new Vector<String>();
for(int i=0; i<boxes.size(); i++){
   if(boxes.elementAt(i).isSelected(){
      sideDishes.add(boxes.elementAt(i).getText();
   }
}
于 2012-06-19T15:58:58.180 回答
0

我认为首先你应该学习的是如何分析问题以及如何使用谷歌或其他搜索引擎网站,所以尝试阅读这个文档并查看示例

于 2012-06-19T15:51:04.400 回答