<GUI部品群AWT>
- Drawメソッドで盤面に「画」をセコセコ書いていても理屈の上ではいろいろ作れる.
- しかし,効率が悪い.
- ボタン,リスト,ラベルなどアリガチなGUIが出来合いの部品としてあると楽.
- AWTはそのような部品群の1つ.
- 昨今はSwingが流行りだが,ここではやらない
<JavaのGUI構造>
<階層的部品配置の例>
- 階層的に構成
- 他の部品を含める部品Containerとそのサブ
- 子を持たない部品Container以外のComponent
<部品のクラス階層>
<例4: ボタンとラベル>
ソースコード<例5: テキスト入力>
- 基本的には,addメソッドで部品を追加していけばOK.
- ついでに,start, stop の振る舞いも復習.
import java.applet.*; import java.awt.*; public class ButtonLabel extends Applet{ private int n=0; public void init(){ this.add(new Button("Nagano")); this.add(new Label("Okinawa")); } public void start(){ this.add(new Button("start"+n)); } public void stop(){ this.add(new Label("stop"+n)); n++; } }
ソースコード
import java.applet.*; import java.awt.*; public class Text extends Applet{ private int n=0; public void init(){ this.add(new TextField("Hello", 10)); this.add(new TextArea(10, 20)); // line, width } }
<部品のレイアウト制御>
<レイアウトの例>
- add()で追加された部品が,左から右に追加されるだけでは芸がない.
- LayoutManagerを実装したクラスを使って,いくつかのレイアウトを指定することができる.
- 残念ながらAwt内のレイアウトの種類は多彩とは言い難い(涙)
<レイアウト設定の手順>
- なんとかLayoutのインスタンスを作る.
- それを,setLayout()メソッドに与える.
- 本メソッドはContainerクラスで定義されている.
- Appletならinit()メソッド内などで設定するのが普通.
<例6: 碁盤の目に並べる>
ソースコード
import java.applet.*; import java.awt.*; public class ButtonGrid extends Applet{ public void init(){ this.setLayout(new GridLayout(4,3)); for(int i=0; i<4*3; i++) add(new Button("No."+i)); } }
<Panelで階層レイアウト>
- Panel内に独自のレイアウトを持たせる.
- 1つのパネルは1つの部品と見なす.
- そのパネルをまた別のパネル上の部品としておく.
- Appletを一番下の下敷きにする.
<例7: 階層的な部品配置>
ソースコード
import java.applet.*; import java.awt.*; public class Contain extends Applet{ public void init(){ add(new RContain(new RContain(new RContain(new RContain(null))))); } }
import java.awt.*; public class RContain extends Panel{ RContain(Panel p){ setLayout(new BorderLayout()); add(new TextField("nagano", 10), "North"); add(new Button("Nagano"), "South"); if(p!=null) add(p, "Center"); add(new Button("Okinawa"), "West"); add(new Label("Osaka"), "East"); } }
実習用の各種ファイルはここから参照&ダウンロード!
2003年10月22日 6:21 更新