我想显示一条消息,显示我选择的内容(Java)

时间:2012-06-19 15:46:18

标签: java swing joptionpane jcheckbox jradiobutton

我正在做一个用于拼贴的项目(类似餐馆),我在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 个答案:

答案 0 :(得分:3)

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

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()来打印String,所以我从上面的代码中删除了它。 Java编码约定是用小写字母启动变量/字段名称。

答案 1 :(得分:2)

由于您可以同时选择多个复选框,因此您应该收集集合中的选中值。 Set<String>会浮现在脑海中,因为您只能选择一个配菜。

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

注意Set<>是一个接口,您需要一个实现类来实际使用它。在您的情况下,HashSet<>可以使用(请参阅SetHashSet的可用方法的文档)

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

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

答案 2 :(得分: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();
   }
}

答案 3 :(得分:0)

我想首先你要学习的是如何分析问题以及如何使用Google或其他搜索引擎网站,所以请尝试阅读this文档并查看示例