【问题标题】:How can i pass a variable with multiple outputs to a Jlabel如何将具有多个输出的变量传递给 Jlabel
【发布时间】:2020-09-14 16:48:24
【问题描述】:

这就是我所拥有的。我正在寻找 ping 一个 IP 地址范围。我的代码在某种意义上可以工作,因为我可以将变量 octet 3 和 4 放入 start 和 end 并在控制台中获得我想要的结果。所有地址都出现在该范围内,并告诉我它们是通过还是失败。我的问题是我试图以多行方式将每个地址传递给同一个 JLabel,如控制台中所示。使用此代码,我只能获得 JLabel 中的最后一个地址输出。我错过了什么?同样,我在控制台中得到了我想要的结果,只需要在 JLabel 中得到相同的结果。一个例子:

控制台节目
10.91.50.1
10.91.50.2
10.91.50.3
10.91.50.4

JLabel 只返回:10.91.50.4

见下面的代码

btnCheckPing1.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent evt) {
            //System.out.println("Check Ping Range");
            /*
                start ip 10.0.a.b       end ip 10.0.x.y
            */
            a = lowX.getText();  // 3rd octet, first group
            b = lowY.getText();  // 4th octet, first group
            x = highX.getText(); // 3rd octet, second group
            y = highY.getText(); // 4th octet, second group
            String pingThis = "";

            int convertA = Integer.parseInt(a);
            int convertB = Integer.parseInt(b);
            int convertX = Integer.parseInt(x);
            int convertY = Integer.parseInt(y);

            if(convertA == convertX) {
                System.out.println("3rd Octet is in range");
                // can ping range


                for(int i = convertB; i <= convertY; i++) {
                    //System.out.println("10.92." + x + "." + i);
                    pingThis = "10.92." + x + "." + i;/
                    //System.out.println(pingThis);
                    try {
                    InetAddress pingRange = InetAddress.getByName(pingThis);
                    boolean reachableGroup = pingRange.isReachable(100);

                    if(reachableGroup == true) {
                        //System.out.println(pingRange + " is valid");
                   /////////Output to JLabel will go here./////////////
                        lblRangeOut.setText(pingThis);

                    } else {
                        //System.out.println(pingRange + " is not valid");
                    }
                } catch (Exception e) {
                    //Nothing goes here
                }}
            } else {
                // cannot ping range
                System.out.println("3rd octet out of range");
            }

            //System.out.println("10.92." + a + "." + b + " " + "10.92." + x + "." + y);
        }
    });

【问题讨论】:

  • 不要使用 JLabel。而是使用 JTextArea,以便您可以附加多行文本。您可以使文本不可编辑且透明,使其看起来更像 Jlabel。

标签: java swing jlabel


【解决方案1】:

您正在使用 setter,它会覆盖先前的值。然后,您需要做的是将您的输出附加到上一个输出的末尾,例如:

lblRangeOut.setText(lblRangeOut.getText() + pingThis)

正如 camickr 在评论中提到的那样,JLabel 一开始不会是我的首选:) 显然,正如他也指出的那样。 JLabel 不接受任何行分隔符。由于这些原因,JTextArea 会更好,代码看起来像:

txtRangeOut.setText(txtRangeOut.getText() + System.lineSeparator() + pingThis)

无论哪种方式,替换先前值的主要原因是 setter 覆盖了它。所以新的值需要由之前的值和附加的字符串组成。

【讨论】:

  • 太棒了。这种组合在这里有所帮助。我也不认为 JLabel 是正确的选择,但我自己只进行了一个月的教学。我认为 TextArea 更好,但我不喜欢最终用户可以编辑它。 SetEditable 将其更正为。
  • (1-) JLabel 无法识别行分隔符。除非您使用 HTML,否则文本始终显示在同一行。
猜你喜欢
  • 2011-04-16
  • 1970-01-01
  • 2019-07-07
  • 2015-04-12
  • 2013-02-27
  • 1970-01-01
  • 1970-01-01
  • 2020-10-03
  • 2012-07-24
相关资源
最近更新 更多