【问题标题】:I want to display a message showing what I selected (Java)我想显示一条消息,显示我选择的内容(Java)
【发布时间】:2012-06-19 15:46:17
【问题描述】:

我正在做一个拼贴项目(比如餐厅),而且我的 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)); }

所以基本上,如果有人愿意提供帮助,请告诉我如何使复选框起作用......每个选中的复选框都会显示在消息中,如下所示:

您已选择:
比萨//餐
番茄酱//精选配菜#1
辣椒//精选配菜#2
羊乳酪//精选配菜#3

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

【问题讨论】:

  • 由于复选框可以被多次选中,我会将它们保存在一种矢量或列表中。然后,如果您单击按钮,您只需遍历它们并调用类似 'if(yourList.elementAt(i).isChecked) // getText() 并将字符串存储在某处'
  • @ValentinoRu 正如 Attila 回答的那样,Set 是此类工作的更好集合:没有副本,项目的单个实例,只需使用 addremove 方法(无需添加更多逻辑)。
  • 同意,不幸的是,我刚刚在发布带有矢量的示例答案后才读到它。

标签: java swing joptionpane jcheckbox jradiobutton


【解决方案1】:

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

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 编码约定是以小写开头的变量/字段名称。

【讨论】:

  • 连接结果不是一个好的解决方案,如果用户取消选中某个选项怎么办?
  • @LuiggiMendoza - 那么该复选框的 getState() 将返回 false,并且您不会连接该选项
  • @LuiggiMendoza,请注意此代码位于 Button1 的事件处理程序中。因此,它总是在按下按钮时检查每个复选框的 当前 状态。
  • @Attila 我选中选项 1 和 2,然后取消选中两者并选中选项 3,连接的字符串将具有 Option1、Option2、Option3。如果我错了,请纠正我。
  • @LuiggiMendoza,这只是一个插图,所以不要指望它是完美的 :-) 可以将所有复选框添加到集合并遍历集合以使其更易于维护。跨度>
【解决方案2】:

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

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

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

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

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

【讨论】:

    【解决方案3】:

    这是一个例子

    假设你有 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();
       }
    }
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • OPs 问题不在于如何使复选框起作用,而在于保存选中的值以将其显示给用户。
      • 这是一个问题吗?到文档的链接提供了很多方法来实现这一点,只需打开头脑并继续。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      相关资源
      最近更新 更多