8. 1 ユーザインターフェース 8. 2 基本的な部品 8. 3 練習問題 8. 4 部品の属性 8. 5 練習問題 8. 6 フォント 8. 7 練習問題 8. 8 レイアウト 8. 9 練習問題 8.10 パネル 8.11 テキストフィールド 8.12 練習問題 8.13 宿題 8.14 おまけ
コンピュータでプログラムが動いているとき、それが人間に対してどのように見えるかということをユーザインターフェース(user interface)と呼びます。例えば、ウィンドウを表示してマウスでクリックできるようにするのも一つのユーザインターフェースですし、結果を標準出力に出すだけでも一つのユーザインターフェースです。
キーボードから命令をタイプするのではなく、ウィンドウとマウスを使った直感的に分かりやすいユーザインターフェースのことをグラフィカルユーザインターフェース(graphical user interface)、略して GUI と呼びます。Java には、GUI を作るための機能が標準で備わっています。
GUI にはよく使われる部品があります。例えば、メニューやボタンやテキスト入力フィールドなどです。こういった部品を組み合わせることによって、あるプログラムの GUI を作ります。組み合わせて使えるようにできている部品セットのことをツールキット(toolkit)と呼びます。
Java には AWT と Swing という二つのツールキットが用意されています。Swing の方が高機能ですが、まだ新しいためブラウザが対応していなかったり、参考資料が少なかったりという難点があります。ここでは AWT を使った GUIの作り方を勉強します。 |
メニューやボタンなどの部品は、それぞれがオブジェクトです。AWT というツールキットは、そういった部品のクラスをたくさん集めたものです。
前回使った SfcTemplate3.java ではどのような部品を使っているか見てみましょう。
6 |
import java.awt.*; |
14 15 16 17 18 19 20 21 22 |
Label l1 = new Label("No Title");
Canvas c1 = new Canvas() {
public void paint(Graphics g) {
// ここで描画領域に図形を描く。(0.2秒間隔で呼び出される)
}
};
Button b1 = new Button("Click");
|
前回の MovingBall.java を変更し、画面上の「No title」の代わりに「Moving Ball」、画面下の「click」の代わりに「ここを押して!」と表示されるようにしなさい。
日本語文字列を含むプログラムをコンパイルする時は javac コマンドに -encoding JIS などのオプションが必要です。 |
それぞれの部品には、大きさや色や表示する文字列など、いろいろな属性があります。インスタンスを作ったときには、デフォールト(省略時設定)の属性になっていますが、部品のメソッドを呼び出すことによって変更することができます。
部品のインスタンス.set属性(必要なデータ)
SfcTemplate3.java では、描画領域の大きさを横400、縦300に、背景色を白に設定しています。
26 27 28 |
public void init() { c1.setSize(400, 300); c1.setBackground(Color.white); |
MovingBall.java の描画領域の色をシアン(Color.cyan)に、その上のラベルの色を黄色(Color.yellow)にしましょう。(大きさの変更については、後で述べるレイアウトのところで説明します)
ラベルやボタンに表示される文字列が小さくて見栄えがしないので、もっときれいに表示しましょう。
文字のデザインに関するデータをフォント(font)と呼びます。フォントデータは、それぞれのコンピュータに格納されているので、表示するコンピュータによって使用できるフォントの種類が違います。
Java では、次のフォント名を指定すると、そのコンピュータで使用できるフォントの中から適当なものを選んでくれます。
例えば、SansSerif のボールド体の24ポイントのフォントを使いたければ、次のようにして Font クラスのインスタンスを作ります。
MovingBall.java を変更し、ラベルとボタンの文字が SansSerif のボールド体の24ポイントのフォントで表示されるようにしなさい。
init メソッドの中でフォントを設定しましょう。
部品をいくつか並べるときは、自動的に大きさや位置を調整して配置してくれる機能があります。SfcTemplate3.java では、BorederLayout というクラスのインスタンスを使用しています。
8.6 フォント
また、それぞれのフォント名に対して、次のようなスタイルを指定できます。
さらに、文字の大きさをポイント数(活字の大きさを指定する単位)で指定します。
new Font("SansSerif", Font.BOLD, 24)
出来たインスタンスは、とりあえず Font 型の変数に記憶しておきます。そのフォントを使いたいラベルやボタンに対して、setFontメソッドで Font のインスタンスを指定することができます。
部品のインスタンス.setFont(フォントのインスタンス)
8.7 練習問題
8.8 レイアウト
29 30 31 32 |
setLayout(new BorderLayout()); add(l1, BorderLayout.NORTH); add(c1, BorderLayout.CENTER); add(b1, BorderLayout.SOUTH); |
BorderLayout 以外の配置の仕方は、こちらを見てください。
ウィンドウ全体の大きさは、SfcTemplate3.html の applet 要素の属性で指定しています。
8 |
<applet code="SfcTemplate3.class" width=400 height=345> |
それぞれの部品が属性として持っている大きさと、このウィンドウの大きさがうまく合わないときは、BorderLayout クラスのインスタンスが、部品の大きさを変更します。
BorderLayout クラスによる大きさの調整方法を調べてみましょう。
BorderLayout では、5個所のそれぞれに1個ずつしか部品を配置できません。もっと複雑な配置をするためには、Panel クラスを使用します。
Panel クラスも部品の一種ですが、それ自体には機能がなく、他の部品を配置するための土台として使われます。
SfcTemplate1.java で Panel クラスをどのように使っているか見てみましょう。
8.9 練習問題
8.10 パネル
11 |
Panel p1 = new Panel(), p2 = new Panel(); |
20 21 22 23 |
p1.add(l1); p1.add(t1); p2.add(l2); p2.add(t2); |
24 25 26 27 |
setLayout(new BorderLayout()); add(p1, BorderLayout.NORTH); add(b1, BorderLayout.CENTER); add(p2, BorderLayout.SOUTH); |
文字を入力するためには、TextField クラスを使います。
SfcTemplate1.java で TextField クラスをどのように使っているか見てみましょう。
13 |
TextField t1 = new TextField(), t2 = new TextField(); |
17 18 19 |
t1.setColumns(20); t2.setColumns(20); t2.setEditable(false); |
35 36 37 38 39 40 41 |
String sfcInput () { return t1.getText(); } void sfcOutput (String s) { t2.setText(s); } |
実行例
GridLayoutと Checkboxの説明を読み、10個以上のチェックボックスを配置して、その中のいくつがチェックされたかを数えて表示するプログラムを書きなさい。
8.14 おまけ
[目次]
[前回]
[次回]
[重要語索引]
慶應義塾大学の授業以外での無断利用、複製はご遠慮下さい。
Copyright (c) 2000 慶應義塾大学