2011-12-25 14 views
2

入力値のグループの頻度を調べるJavaコードを作成しました。 これは出力の最後の部分の外観です。java gui window

境界は、次のとおり

区間[11.5から27.5]は含ま:2数(S)

は区間[27.5から43.5]は含まれています:1基の数(S)

区間[43.5から59.5まで]の要素を

インターバルを含まない[59.5から75.5]は含まれています:1基の数(S)

区間[75.5から91.5]が含まれています:1基の数(S)

私はGUIに変換しようとしましたが、少し問題がありました: 結果の各行が新しいウィンドウに表示されています。私は結果のグループが1つのウィンドウで来る作るのですか

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; 

    } 

} 
} 

だから、私の質問は次のとおりです。

これは、GUIのコードはありますか?

のthnx ..あなたは、JOptionPaneの中に表示するためのさまざまなコンポーネントを使用する必要が

答えて

2

JTextAreaまたはJListを使用して、個々のデータ行を表示することができます。

次に、そのコンポーネントをオプションペインに追加し、オプションペインを表示します。

Swing tutorialをお読みください。上記の各構成要素のセクションと実際の例があります。

2

文字列を構築し、最後にのみ結果を表示します。このためには、メソッドの冒頭にStringBuilder(それをメッセージと呼ぶ)を作成します。

その後、別の方法としては、適切なコンポーネント(JLabelの/ JTextFieldの)でそれを表示し、textプロパティを設定することができ、引数としてmessage.toString()で一度非常に通話終了JOptionPanemessage.append(<your text here>)

JOptionPaneへのすべての呼び出しを置き換えます。これは複数回行うことができるので、すぐに結果を表示することができます。

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

コードを作成する新しいJFrameの、そのレイアウトのJPanel BoxLayoutに設定する:成分自体がメインメソッドに次のコードを追加

+0

(JLabelの/ JTextFieldの)とアクションハンドラを、私はどのように知りません。 JTextfieldから取得した値についていくつかの計算を行います。 最初の部分についてループ外に表示するには、この方法はアクションハンドラより簡単です。 –

+0

答えを更新しました –

2

トップレベルウィンドウ(のJFrameまたはJDialogの)内に配置されます。最後のif文ループ

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

中に

そして、これはテキストを表示するためのJLabelを追加します。

最後のelse文に

そして、このループ

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

とコードの最後のビットは、最後のwhileループoafterになりながら。

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

ありがとうございました。 –