Document

Ver.0.95
準備
Javaフォルダに移動して……
mkdir Swing
Swingフォルダに移動して……
cp ~gundam/Java/Swing .
コマンドプロンプト(JDK)でないと起動しない
ので注意!!!
Swingって何?
・JavaのGUIコンポーネント集のこと
・初期のJavaから標準でサポートされていたAWTでデザイン性や
操作性の機能が乏しく本格的なGUIを実現したもので、
Sun Microsystems社とNetscape社が協力して作成 したもの。
http://www.bohyoh.com/Java/FAQ/FAQ00007.html
Swingのイメージ
フレームを作成しその上にペイン(窓ガラス)をおき
その上にボタンとフレームを置いていくイメージ
Swingコンポーネント
・Windowの部品
パネル・フレーム
ボタン・メニュー
ラベル・テキストエリア・テキストボックス
ラジオボタン・チェックボックス
などがある。
・Swingコンポーネントを利用するには
import javax.swing.*;
をプログラムの冒頭に必要となる。
コンポーネントとは?
・何らかの機能を持ったプログラムの部品のこと
import javax.swing.*; で袋を呼び出す
袋から取り出された部品
この袋に入っていた部品のことをコンポーネントと言う
Swingの実行方法
javac XXX.java
java XXX
普通に実行するだけです。(XXXはファイル名)
Swingのプログラムイメージ
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class XXX extends JPanel{
パネルでのグラフィック処理
パネルの設定・処理
パネル上でのイベント処理
}
class XXX extends JFrame{
フレームへのパネルの配置
フレームの設定・処理
フレーム上でのイベント処理
}
class XXX{
public static void main(String[] args){
JFrame w = new B05aFrame();
w.show();
}
}
Pacman.java の実行結果
Swingを用いてグラフィックを表示する
Pacman.java
1
2
3
4
5
6
7
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.*;
PacmanクラスにJpaneを継承
public class Pacman extends JPanel{
public Color c = Color.green;
グラフィックの描画
public void paintComponent(Graphics g){
を行うメソッド
super.paintComponent(g);
g.setColor(c);
g.fillArc(100, 100, 100, 100, 30, 300);
}
public static void main(String argv[]){
JFrame f = new JFrame();
JFrameにContentPane
f.getContentPane().add(new Pacman());
を取得させその上に
f.addWindowListener(new WindowAdapter(){
Jpanelを載せている。
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
f.setSize(300,300);
ウィンドウが閉じられ
f.show();
Jframeの表示
たときのイベント
}
}
Pacman2.javaの実行結果
Swingを用いてグラフィックを表示する
Swingを用いてボタンの生成する
Pacman2.java
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public static void main(String argv[]){
JFrame f = new JFrame();
Container c = f.getContentPane();
Pacman2 p = new Pacman2();
c.add(p);
JButton b = new JButton("Red");
c.add(b, BorderLayout.NORTH);
Redという名前でボタンbを生成
ぺインの上側にボタンをのせる。
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
f.setSize(300,300);
f.show();
}
Pacman3.javaの実行結果
Swingを用いてグラフィックを表示する
Swingを用いてボタンの生成する
ボタンの動作設定をする
Pacman3.java
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 }
public void actionPerformed(ActionEvent e){
col = Color.red;
repaint();
}
13:colにredを指定
14:際描写している
public static void main(String argv[]){
JFrame f = new JFrame();
Container c = f.getContentPane();
Pacman3 p = new Pacman3();
c.add(p);
RedというラベルでボタンBを生成
JButton b = new JButton("Red");
c.add(b, BorderLayout.NORTH);
actionListerを呼び出し
b.addActionListener(p);
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
f.setSize(300,300);
f.show();
演習
Pacman3.javaを参考に,ボタンを押す度に赤と緑を 交互に変える
PacmanRG.javaを作成してください。
Changeをクリックすると色が変わる
ヒント
・actionPerformedの中の動作を考えてください。
・If文を使います
・col = Color.red;で色を赤にします。
PacmanRG.javaの回答
actionPerformedの中で定義しないので注意
7 int i=0;
・
・
14 public void actionPerformed(ActionEvent e){
15
if(i%2 == 0){
16
col = Color.red;
i÷2をすることで、偶数に
17
} else{
なった場合にredにしている。
18
col = Color.green;
奇数であればgreenになる。
19
}
再描写したあとでiを+している
20
repaint();
21
i++;
22 }
・
・
19
JButton b = new JButton("Change");
Icon1.javaの実行結果
Swingを用いてアイコンを生成する
Icon1.java
1 import javax.swing.*;
2 import java.awt.event.*;
3 import java.awt.*;
4
5 public class Icon1 extends JPanel{
7:指定した画像をimgという
6
Icon1(){
7
Icon img = new ImageIcon("C-01.gif"); アイコンとして生成
8:imgを乗せたlabという
8
JLabel lab = new JLabel(img);
ラベルを生成
9
add(lab);
9:Jpanelにlabを乗せている
10
}
11
public static void main(String argv[]){
12
JFrame f = new JFrame();
Icon2を呼び出している
13
f.getContentPane().add(new Icon1());
14
f.addWindowListener(new WindowAdapter(){
15
public void windowClosing(WindowEvent e){
16
System.exit(0);
17
}
18
});
19
f.setSize(300, 300);
20
f.show();
21
}
22 }
Icon2.javaの実行結果
Swingを用いて複数のアイコンを生成する
Icon2.java
5 public class Icon2 extends JPanel{
6
Icon2(){
7
JLabel lab1 = new JLabel(new ImageIcon("C-01.gif"));
8
JLabel lab2 = new JLabel(new ImageIcon("C-02.gif"));
9
add(lab1);
10
add(lab2);
11
}
12
public static void main(String argv[]){
13
JFrame f = new JFrame();
14
f.getContentPane().add(new Icon2());
Icon2を呼び出している
15
f.addWindowListener(new WindowAdapter(){
16
public void windowClosing(WindowEvent e){
17
System.exit(0);
18
}
19
});
20
f.setSize(300, 300);
21
f.show();
22 }
23 }
Icon3.javaの実行結果
Swingを用いてアイコンを表示する
Swingを用いてボタンの生成する
絵が変わるボタンの動作設定をする
Icon3.java
1 import javax.swing.*;
2 import java.awt.event.*;
3 import java.awt.*;
4
5 public class Icon3 extends JPanel implements ActionListener{
6
Icon i1 = new ImageIcon("C-01.gif");
7
Icon i2 = new ImageIcon("C-02.gif");
8
JLabel lab;
9
Icon3(){
10
lab = new JLabel("Tile");
11:i1のアイコンをsetしている
11
lab.setIcon(i1);
Changeというラベルでボタン
12
add(lab);
bを生成
13
JButton b = new JButton("Change");
14
add(b);
15
b.addActionListener(this);
16
}
17
public void actionPerformed(ActionEvent e){
18
lab.setIcon(i2);
Iconのi2を呼び出している
19
}
Text1.javaの実行結果
Swingを用いたテキストフィールドの作成をする
Text1.java
1 import javax.swing.*;
2 import java.awt.event.*;
3 import java.awt.*;
4
5 class Text1 extends JPanel implements ActionListener{
テキストフィールドtを定義
6
JTextField t;
7
JLabel lab;
8
Text1(){
9
t = new JTextField("Write Here", 20);
10
t.addActionListener(this);
11
add(t);
12
lab = new JLabel("Tile");
13
add(lab);
14
}
15
public void actionPerformed(ActionEvent e){
16
lab.setText(t.getText().toUpperCase());
17 }
・
・
Write Hereと書かれ
た20文字分のテキス
トフィールドtを生成
t.getText()でテキスト
フィールドtの中身を
取得し大文字にし
lab.setTextでラベルに
貼り付けている
Text2.javaの実行結果
Swingを用いたテキストフィールドの作成をする
xが入力されたらその二倍を出力する
Text2.java
1 import javax.swing.*;
2 import java.awt.event.*;
3 import java.awt.*;
4
5 class Text2 extends JPanel implements ActionListener{
6
JTextField t;
7
JLabel lab;
8
Text2(){
9
t = new JTextField("Input x", 20);
10
t.addActionListener(this);
11
add(t);
12
lab = new JLabel("* 2 = ");
ラベルを生成し貼り付け
13
add(lab);
14
}
15
public void actionPerformed(ActionEvent e){
15:Int型にtの内容を変換
16
int x = Integer.parseInt(t.getText());
16:*2=という文字列とxの
17
lab.setText("* 2 = " + (x*2)); 18 }
計算結果をしてる。
・
・
演習
シグモイド関数 f(x) = 1/(1 + e-x) を計算する Text3.javaを作成してください。
ヒント
・eはMath.expを用いる
・計算結果は少数の値が表示されるのでdoubleを用いる
・計算式はdouble f = 1/(1 + Math.exp(-x));となる
・TextFieldを1つとLabelを2つ作る