我编写了一个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 ..
答案 0 :(得分:2)
您需要使用其他组件在JOptionPane中显示。
也许您可以使用JTextArea或JList来显示各行数据。
然后将该组件添加到选项窗格并显示选项窗格。
阅读Swing tutorial。它有关于上述每个组件的部分以及工作示例。
答案 1 :(得分:2)
您构建String并且仅在结尾处显示结果。为此,在方法的开头创建一个StringBuilder
(让我们称之为消息)。
然后将JOptionPane
的所有来电替换为message.append(<your text here>)
最后以JOptionPane
作为参数
message.toString()
一次
或者,您可以在合适的组件(JLabel / JTextfield)中显示它并设置text属性。这可以多次完成,因此您可以在获得结果后立即显示结果。组件本身将位于Toplevel窗口(JFrame或JDialog)
中答案 2 :(得分: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);
最后一段代码在最后一次循环之后。
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);
. . .