【问题标题】:Iterate through selected checkboxes, get text, create ini遍历选中的复选框,获取文本,创建 ini
【发布时间】:2013-12-05 21:44:19
【问题描述】:

所以我正在通过一个工作项目自学 Java(我自己发起了这个项目)。感谢这个网站的优秀用户,我的很多程序都在运行。

我的问题: 我有带有多个复选框的简单 GUI,可以选择。用户将选择一个或多个,然后单击启动代码的按钮,该代码将构建另一个程序所需的 ini 文件。到目前为止,我可以遍历每个复选框并获取选中的名称。基本上,现在,我知道下面的代码是错误的,因为它使用了 if 和 else if 语句,它们只是相互覆盖。

基本上,我希望用户能够选择 GUI 上的任何复选框,并让此类检查哪些复选框被选中,为每个选择分配实际的网络路径值并将它们附加在一起。根据我已经阅读的内容,我认为我需要使用 case 语句来完成此操作。

编辑:问题是,如何遍历每个选中的复选框,抓取文本,将文本字符串转换为多选的组合字符串

if (strRaw.equals("Site1")){
      strRef = "source=NetworkPath1,";
   }
 else if (strRaw.equals("Site2")){
      strRef = "source=NetworkPath2";
   }
 else if (strRaw.equal("Site3")){
      strRef = "source=NetworkPath3";
   }

示例 Checkbox1 被选中

Checkbox2 未选中

Checkbox3 被选中

Checkbox1.text = 某事

Checkbox3.text = 另一件事

输出字符串 = 某事,另一件事

任何帮助将不胜感激,就像我说我还在学习 Java。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.LinkedList;
import java.util.List;

import javax.swing.JCheckBox;
import javax.swing.JOptionPane;

public class MyActionListener implements ActionListener {
  private final List<JCheckBox> checkBoxes = new LinkedList<JCheckBox>();


  public void addCheckBox(JCheckBox checkBox) {
    this.checkBoxes.add(checkBox);
  }

  public void actionPerformed(ActionEvent evt) {

    // Iterate over each JCheckBox

    for (JCheckBox checkBox : checkBoxes) {
      if (checkBox.isSelected()) {

          String strRaw = new String(checkBox.getText());
          String strRef = new String();
          try {

            PrintWriter writer = new PrintWriter("C:\\Control\\test1.ini", "UTF-8");
            writer.println("[TifSource]");
            if (strRaw.equals("Site1")){
                strRef = "source=NetworkPath1,";
            }
            else if (strRaw.equals("Site2")){
                strRef = "source=NetworkPath2";
            }
            else if (strRaw.equal("Site3")){
                            strRef = "source=NetworkPath3";
                    }
            writer.println(strRef + "\n");
            writer.println("[Division]");
            writer.println("division=divisionarea\n");
            writer.println("[Area]");
            writer.println("area=6\n");
            writer.println("[TifIndex]");
            writer.println("Updated=0");
            writer.println("Version=81008");
            writer.close();

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }

          JOptionPane.showMessageDialog(null, strRef);
        };
    }
  }
}

【问题讨论】:

  • 究竟是什么不工作?你还没有真正问过问题。
  • 已尝试解决问题,抱歉我在工作时正在做这些帖子,正在解决客户计算机问题...
  • 什么不起作用?代码看起来不错,因为您想逐行打印所有这些内容。

标签: java checkbox


【解决方案1】:

你可以做这样的事情。使用 StringBuilder 并在每次迭代时附加到它

StringBuilder sb = new StringBuilder();

for (JCheckBox checkBox : checkBoxes) {
  if (checkBox.isSelected()) {

      String strRaw = new String(checkBox.getText());
      String strRef = new String();

      sb.append("[TifSource]");
      if (strRaw.equals("Site1")){
          sb.append("source=NetworkPath1, ");
      }
      else if (strRaw.equals("Site2")){
          sb.append("source=NetworkPath2, ");
      }
      else if (strRaw.equal("Site3")){
         sb.append("source=NetworkPath3, ");
      }
      sb.append(strRef + "\n");
      sb.append("[Division]");
     sb.append("division=divisionarea\n");
      sb.append("[Area]");
      sb.append("area=6\n");
      sb.append("[TifIndex]");
      sb.append("Updated=0");
      sb.append("Version=81008");
  }
}

try {

   PrintWriter writer = new PrintWriter("C:\\Control\\test1.ini", "UTF-8");
   writer.println(sb.toString());

} catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
   e.printStackTrace();
} catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
   e.printStackTrace();
}

【讨论】:

    【解决方案2】:

    对你想要什么感到困惑。您可以创建一个字符串,并附加到它,然后将其写入文件?这对你有用吗?同样,我有点困惑你需要什么。

    String x;
    x += "\nSome Text"; // \n is a new line
    x += "Other stuff";
    
    writer.println(x);
    

    这对你有用吗?

    【讨论】:

    • 对不起,我实际上是想找到一种好方法来解释我正在尝试做的事情。基本上,假设有 3 个复选框。我想看看哪些被检查了,我可以做那部分。但是,我希望能够获取唯一标识符(在这种情况下为文本),然后根据选择构建一个字符串。因此,如果选中 1 和 2,则字符串将为“chb1.text, chb2.text”。如果选中了二和三,则字符串将为“chb2.text, chb3.text”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 2022-01-20
    • 2011-12-21
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多