久しぶりにJavaを使った。
初めてAWTなるものとSwingなるものを使った。
AWT
Abstract Windowing Toolkit
JavaでGUIを実装するために使うクラスライブラリの総称。
Java標準で付属。
OSのウィンドウシステムに準じたデザイン
Swing
AWTの拡張。
Javaプログラム上で描画される。柔軟。軽量コンポーネントと呼ばれる
複雑なことをやるにはこっちが楽?
swingコンポーネントの一覧さらにSWTというものもあるそうで。
http://www.sophia-it.com/content/AWThttp://ja.wikipedia.org/wiki/Swinghttp://ja.wikipedia.org/wiki/Standard_Widget_ToolkitまずはAWTのコード例
import java.applet.Applet;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Sample extends Applet implements ActionListener {
TextField tf;
Button b;
public void init() {
tf = new TextField(60);
tf.setBounds(10, 50, 100, 20);
add(tf);
b = new Button("押せ!");
b.setBounds(130, 50, 40, 20);
b.addActionListener(this);
add(b);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == b) {
//押された
}
}
public void paint(Graphics g) {
g.setColor(Color.GRAY);
g.fillRect(0, 0, 200, 150);
g.drawString("こんにちは世界", 10, 10);
}
};
main()は不要。
クラスはAppletを継承する。
init()で初期化。
paint(Graphics)で描画。
コンポーネントは生成していれば描画される。
ボタン押下などのイベントを実装したいときは、クラスがActionListenerをimplementする。コンポーネントにaddActionListenerを呼ぶと、デレゲート(で呼び方いいの?)のactionPerformedが呼ばれる。このあたりiOSと似てる。
なお、再描画命令はrepaint();。
次いでSwingのコード例
import javax.swing.*;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class SampleClass extends JPanel implements ActionListener {
JTextField tf;
JButton b;
JFileChooser fc;
public static void main(String[] args){
//JFrameはウィンドウを作成するコンポーネント
JFrame frame = new JFrame();
//JFrameの下にJPanel(this)を付ける.
SampleClass app = new SampleClass();
frame.getContentPane().add(app);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 500, 400);
frame.setTitle("Title of SampleClass");
frame.setVisible(true);
app.init();
}
public void init() {
tf = new TextField(60);
tf.setBounds(10, 50, 100, 20);
add(tf);
b = new Button("ファイル開く?");
b.setBounds(130, 50, 40, 20);
b.addActionListener(this);
add(b);
fc = new JFileChooser( "." ); //カレントディレクトリ
repaint();
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == b) {
int result = fc.showOpenDialog( null );
if(result==JFileChooser.APPROVE_OPTION) {
System.out.println(fc.getSelectedFile().getPath());
}
}
}
public void paint(Graphics g) {
g.setColor(Color.GRAY);
g.fillRect(0, 0, 200, 150);
g.drawString("こんにちは世界", 10, 10);
}
}
SwingでもAWTをいくらか必要とするそうだ。
クラスはJPanelを継承しているが、たぶんJComponentを継承する必要があるんだろう。
JFrameはウィンドウコンポーネント。
JPanelは中間的な表示領域。他のコンポーネントを配置する。
JFrame.contentPane<- (add) <- JPanel <- (add) <- JButton, JTextField...
という構造になる。
main()が必要。ここでJFrameを作って、JPanel(ここではSampleClass)を追加。
で、クラス内の初期化を呼び出す(app.init())。そこでJPanelにコンポーネントを追加。
ちゃんとrepaint()しないと描画されないので注意。
ActionListenerはAWTと同様に使える。
クラス名にはJが付くみたい。
ファイルチューザは、Swingにしかないコンポーネントの例として。
クラスの階層構造はこんな感じ。
java.lang.Object
java.awt.Component
java.awt.Button
java.awt.TextComponent
java.awt.TextField
java.awt.Container
java.awt.Window ---------ここまでAWT
javax.swing.JComponent ---------ここからSwing
javax.swing.JPanel
javax.swing.AbstractButton
javax.swing.JButton
javax.swing.text.JTextComponent
javax.swing.JTextField
java.awt.Window
java.awt.Frame
javax.swing.JFrame -------ここもSwing
慶応大学の何かの授業のページ?
http://www.geocities.jp/h2fujimura/appendix/Component/index.htmlSunのページ
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/index.htmlPR