Document

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を使います。
実行例
×
○