2011-12-25 87 views
2

我写了一个java代码,用于查找输入值组的频率。 这是输出的最后部分应该看起来像什么。java gui窗口

边界是:

间隔[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 ..

回答

2

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

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

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

阅读Swing tutorial。它在上面的每个组件部分都有工作示例。

2

您建立了字符串,只在最后显示结果。为此,在方法开始时创建一个StringBuilder(让我们称它为消息)。

然后用message.append(<your text here>)

代替每次调用JOptionPane在最后呼叫JOptionPane一旦与message.toString()作为参数

或者,也可以在适当的组件(一个JLabel/JTextField中)显示它并设置文本属性。这可以做多次,所以你可以显示结果,只要你有它们。该组件本身将被定位于顶级窗口(JFrame的或的JDialog)

+0

我会一直使用(一个JLabel/JTextField中)和操作处理程序,但我不知道该怎么对JTextfield的值进行一些计算。 关于你的第一部分我该如何在循环外显示它,这种方式比动作处理更简单。 – 2011-12-25 18:23:43

+0

我更新了答案 – 2011-12-26 05:59:39

2

下面的代码添加到您的主要方法:

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

的代码创建一个新的JFrame,并用它的布局一个JPanel设置为BoxLayout

而这最后的if语句while循环

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

添加一个JLabel来显示文本。

而这最后的else语句while循环

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

和代码的最后位变为oafter最后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); 
. . . 
+0

非常感谢你,它的工作 – 2011-12-26 03:13:27