окно java gui - PullRequest
       21

окно java gui

2 голосов
/ 25 декабря 2011

Я написал код 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:

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 ..

Ответы [ 3 ]

2 голосов
/ 25 декабря 2011

Вы строите строку и только в конце отображаете результат.Для этого создайте StringBuilder (давайте назовем это сообщением) в начале вашего метода.

Затем замените каждый вызов на JOptionPane на message.append(<your text here>)

В самом конце вызова JOptionPane один раз с message.toString() в качестве аргумента

В качестве альтернативы вы можете отобразить его в подходящем компоненте (JLabel / JTextfield) и установить свойство текста.Это можно сделать несколько раз, чтобы вы могли показать результаты, как только они появятся.Сам компонент будет расположен в окне верхнего уровня (JFrame или JDialog)

2 голосов
/ 25 декабря 2011

Добавьте следующий код к основному методу:

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);

И последний бит кода идет после последнего цикла 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);
. . .
2 голосов
/ 25 декабря 2011

Вам нужно использовать другой компонент для отображения в JOptionPane.

Возможно, вы могли бы использовать JTextArea или JList для отображения отдельных строк данных.

Затем вы добавляете этот компонент впанель параметров и отображение панели параметров.

Прочитайте учебник Swing .Он имеет раздел по каждому из вышеперечисленных компонентов с рабочими примерами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...