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