POINT
Java では GUI の構成要素を Component という
javax.swing.JComponent を継承する
■ Window
ウィンドウをつくるには JFrame を作成して表示する。
JFrame も GUI コンポーネントのひとつ。
import javax.swing.*;
import java.awt.*;
public static void main() {
// フレーム( ウィンドウ )を作成。
JFrame f = new JFrame();
f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
// 大きさの設定
f.setSize( 300, 300 );
// 位置の設定
f.setLocation( 100, 100 );
// 表示する。
f.setVisible( true );
}
メインスレッドを止めても, GUI の操作は受け付けるらしい。
// 表示する。
f.setVisible( true );
// 無限ループ
while ( true ) {
System.out.print(".");
}
■ ボタン(Button)
すべての GUI コンポーネントはフレームに追加することで、配置される。
JFrame f = new JFrame();
JButton b = new JButton( "click me" );
f.getContentPane().add( BorderLayout.EAST, b );
ボタンのコールバックを受け取るにはリスナーを追加する。
リスナーに登録するには ActionListener を実装する。
class MyListener implements ActionListener {
public void actionPerformed( ActionEvent e ) {
System.out.println( "button clicked" );
}
}
ボタンオブジェクトに対してリスナー( コールバック )を登録する。
b.addActionListener( new MyListener() );
■ グラフィック(Graphic.Swing)
グラフィックを描画するには JFrame.paint(Graphics g) メソッドをオーバーライドする。
Graphics は描画のためのメソッドと共にグラフィックスのステートをもつ。
class MyFrame extends JFrame {
public void paint(Graphics g){
super.paint( g );
// カラーステートを青に変更
g.setColor(Color.BLUE);
g.drawRect(10,60,280,180);
// 位置 と 大きさ を指定
fillRect( int x, int y, int width, int height );
g.fillOval(100,100,100,100);
// テキストを描く
g.drawString("Swing Test", 10, 50);
}
MyFrame() {
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
setSize( 300, 300 );
setVisible( true );
}
public static void main() {
JFrame f = new MyFrame();
}
}
ボタンを押したら色を変更するためにボタンのリスナーになる。
class MyFrame extends JFrame implements ActionListener {
int flag = 0;
public void actionPerformed( ActionEvent e ) {
flag ++;
// 画面を更新するには再描画を要求する。
repaint();
}
}
ボタンの種類を判別するには, ActionEvent.getActionCommand() を利用する。
ラベルの文字列が返ってくるので判別できる。
if ( e.getActionCommand() == "click me" ) {
System.out.println( "button clicked go" );
}
else {
System.out.println( "NOT button clicked stop" );
}
■ 画像を表示する
public void paint(Graphics g){
super.paint( g );
Image i = new ImageIcon( "d:/test.jpg" ).getImage();
g.drawImage( i, 0, 0, this );
}