Swing ~続き~ パネルの統合 今まで作ったパネルを統合してひとつのウィンドウ上 に表示させる。 Works.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import javax.swing.*; import java.awt.event.*; import java.awt.*; class Works extends JPanel{ コンテントペインを 生成し public static void main(String argv[]){ JFrame f = new JFrame(); レイアウトを設定し Container c = f.getContentPane(); c.setLayout(new FlowLayout()); 作成したパネルをコンテ c.add(new Icon3()); ントペインに乗せる c.add(new Text1()); c.add(new Text2()); c.add(new Text3()); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); f.setSize(300, 300); f.show(); } } 実行結果 9: c.setLayout(new FlowLayout()); 追加された部品は、通常の文字列と同様に追加された順番で行内に左から 右へ並べられます。部品の大きさは自然サイズに固定されて、一行内に収 まりきらなくなると改行されて続きます。 レイアウトを設定しないと? パネルが重なってしま い、最後に置いた Text3しか見えなくなっ てしまう。(他のパネル はText3の下にある) その他のレイアウト GridLayout(int rows, int cols) コンテナを、指定された縦rows*横colsの矩形領域に分割し、そこに部 品を追加します。各矩形領域の大きさは同じになります。したがって、 領域の大きさに応じて部品の大きさも変わります。 BorderLayout() 部品を追加するコンテナの領域を、NORTH (上部)、SOUTH (下部)、 EAST (右)、WEST (左端)、CENTER (中央) の5つの部分に分割し、 そこに部品を追加します。したがって、このレイアウトマネージャを使っ て配置された部品の大きさは、コンテナの大きさに依存して自動的に調 整されます。 etc… ApplicationのSwing化 テキストベースのアプリケーション Comb.javaをSwingを 用いてGUIをつけてみる。 Step 1: 入出力を静的メソッドにまとめる. Step 2: CombSwing.javaをSwingベースにする. (HellowWorldSwing.javaやIcon1.java参照) Step 3: 入出力変数を括り出す.(ActionPerformedを定義) Comb.java Step3:入出力変数を 括りだす import java.math.*; class Comb{ public static void main(String argv[]){ int n = Integer.parseInt(argv[0]); Step1:入出力 を静的メソッド にまとめる int k = Integer.parseInt(argv[1]); BigInteger c = (fact_r(n).divide(fact_r(n-k))).divide(fact_r(k)); System.out.println("n C k = " + c); } static BigInteger fact_r(int a){ BigInteger y = new BigInteger("1"); for(int i = 1; i <= a; ++i){ y = y.multiply(BigInteger.valueOf(i)); } return(y); } } Step2:全体を Swingベースに 書き換える CombSwing.javaの説明 ソースの量が多いので、テキストと見比べてください。 Step1 Comb.java 4~7行 CombSwing.java 46~48行 入出力値を静的メソッドにまとめる。 Step2 Comb.java 全体 CombSwing.java 6~24行、41~50行 プログラムをSwingベースに変える。 このような画面を作る↑ Step3 Comb.java 4,5,8行 CombSwing.java 25~30行 入出力変数を括り出す.(ActionPerformedを定義) 演習 次の温度セ氏華氏変換プログラムFahrenheit.java の Swing版 FahrenheitSwing.javaを書け. 1 class Fahrenheit{ 2 public static void main(String argv[]){ 3 int c = Integer.parseInt(argv[0]); 4 int h = c*9/5 + 32; 5 System.out.println(c + " degree C"); 6 System.out.println(h + " degree H"); 7 8} } 宿題:10.3 数当てゲームのSwing版 ChallengeSwing.javaを書け. オリジナル問題 kik1.java~kik4.javaのパネルを統合して菊池先生 の画像を完成させてください。 ヒント: FlowLayoutを使うとパネルに間があいて しまうので… オリジナル問題 1 4択問題を作ってください。 どれか答えるとファイナルアンサーと聞いてきてファイナルアンサーと答えると 正解か間違えかを判断するようにしてください。 間違えた場合はもう一度問題ができるようにしてください。 ボタン・テキストエリアの配置は気にしなくてかまいません。 ヒント ・TextAreaの使い方 JTextArea m; String m1 = "ファイナルアンサー"; m = new JTextArea(5,20); m.setText(m1); add(m); でm1に入っている文字列を呼び出すことができます。 ・ボタンを押されたかの判定はequalsを使います。 実行例 × ○
© Copyright 2025 ExpyDoc