【问题标题】:java gui windowjava gui窗口
【发布时间】:2012-01-27 16:05:00
【问题描述】:

我编写了一个 java 代码来查找输入值组的频率.. 这就是输出的最后一部分应该是这样的。

边界是:

区间 [11.5 - 27.5] 包含:2 个数字

区间 [27.5 - 43.5] 包含:1 个数字

区间 [43.5 - 59.5] 不包含元素

区间 [59.5 - 75.5] 包含:1 个数字

区间 [75.5 - 91.5] 包含:1 个数字

但是当我尝试将其转换为 gui 时,我遇到了一个小问题: 结果的每一行都显示在一个新窗口中。

这是 gui 代码:

import java.util.ArrayList;
import java.util.Scanner;
import javax.swing.JOptionPane;

public class Frequency

{

private static ArrayList<Integer> FindNumbersInInterval(int[] array,double     startInterval,double endInterval)
{

    ArrayList<Integer> result = new ArrayList<Integer>() ;

    for(int v: array)
    {
        if(v >= startInterval && v <= endInterval)
        {
            result.add(v);
        }
    }
    return result;
}

public static void main(final String args[])
{

    int smallest = Integer.MAX_VALUE;

    int largest = Integer.MIN_VALUE;

    int range = 0;

    String numberOfNumbers =
    JOptionPane.showInputDialog("How many numbers do you want to enter: ");
    int num=Integer.parseInt(numberOfNumbers);


    int array[]=new int[num];   




    for(int i=0; i<array.length; i++)
    {

    String theNumbers =
    JOptionPane.showInputDialog("Enter the numbers now: ");

    array[i]=Integer.parseInt(theNumbers);

    {
        if(array[i] < smallest)

            smallest = array[i];

        if(array[i] > largest)

            largest = array[i];

    }

    }

    JOptionPane.showMessageDialog(null,"Smallest is "+smallest,"Smallest",JOptionPane.PLAIN_MESSAGE);
    JOptionPane.showMessageDialog(null,"Largest is "+largest,"Largest",JOptionPane.PLAIN_MESSAGE);


    range = largest - smallest;

    JOptionPane.showMessageDialog(null,"Range is "+range,"The Range",JOptionPane.PLAIN_MESSAGE);

    String subInterval =
    JOptionPane.showInputDialog("Enter the number of subinterval: ");
    int subnum = Integer.parseInt(subInterval);

    int subwid = range / subnum;

    JOptionPane.showMessageDialog(null,"The width of subinterval is "+subwid,"width",JOptionPane.PLAIN_MESSAGE);



    double boundary = smallest - .5;

    JOptionPane.showMessageDialog(null,"Boundaries are ","The Boundaries",JOptionPane.PLAIN_MESSAGE);

    while(boundary < largest + .5)

    {

        double startInterval = boundary;

        double endInterval   = boundary + subwid;

        ArrayList<Integer> numbersInInterval = FindNumbersInInterval(array, startInterval, endInterval);

        if(numbersInInterval.isEmpty())

            JOptionPane.showMessageDialog(null,"Interval "+startInterval+" - "+endInterval+" does NOT contain elements","result",JOptionPane.PLAIN_MESSAGE);

        else {

            JOptionPane.showMessageDialog(null,"Interval "+startInterval+" - "+endInterval+" contains "+numbersInInterval.size(),"result",JOptionPane.PLAIN_MESSAGE);


        }

        boundary += subwid;

    }

}
}

那么,我的问题是如何让一组结果出现在一个窗口中?

thnx..

【问题讨论】:

    标签: java swing user-interface window


    【解决方案1】:

    您需要使用不同的组件在 JOptionPane 中显示。

    也许您可以使用 JTextArea 或 JList 来显示单独的数据行。

    然后将该组件添加到选项窗格并显示选项窗格。

    阅读Swing tutorial。它包含上述每个组件的部分以及工作示例。

    【讨论】:

      【解决方案2】:

      将以下代码添加到您的 main 方法中:

      JFrame frame = new JFrame();
      JPanel contentPane = new JPanel();
      contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));
      frame.add(contentPane);
      

      代码创建了一个新的 JFrame 和一个 JPanel,其布局设置为 BoxLayout

      这是最后一个while循环的if语句

      JLabel label = new JLabel("Interval "+startInterval+" - "+endInterval+" does NOT contain elements");
      contentPane.add(label);
      

      添加一个 JLabel 来显示文本。

      这是最后一个while循环的else语句

      JLabel label = new JLabel("Interval "+startInterval+" - "+endInterval+" contains "+numbersInInterval.size());
      contentPane.add(label);
      

      最后一段代码在最后一个 while 循环之后。

      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
      

      显示 JFrame。

      您可以从代码中删除以下行:

      . . .
      JOptionPane.showMessageDialog(null,"Interval "+startInterval+" - "+endInterval+" does NOT contain elements","result",JOptionPane.PLAIN_MESSAGE);
      . . .
      

      . . .
      JOptionPane.showMessageDialog(null,"Interval "+startInterval+" - "+endInterval+" contains "+numbersInInterval.size(),"result",JOptionPane.PLAIN_MESSAGE);
      . . .
      

      【讨论】:

        【解决方案3】:

        您构建字符串,仅在最后显示结果。为此,在方法的开头创建一个StringBuilder(我们称之为消息)。

        然后将每次调用 JOptionPane 替换为 message.append(&lt;your text here&gt;)

        最后以message.toString() 作为参数调用JOptionPane 一次

        或者,您可以在合适的组件(JLabel / JTextfield)中显示它并设置文本属性。这可以多次执行,因此您可以在获得结果后立即显示结果。组件本身将位于顶层窗口(JFrame 或 JDialog)中

        【讨论】:

        • 我会使用 (JLabel / JTextfield) 和动作处理程序,但我不知道如何对取自 JTextfield 的值进行一些计算。关于你的第一部分我如何在循环之外显示它,这种方式比动作处理程序更容易。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-30
        相关资源
        最近更新 更多