Microsoft PowerPoint - swing3.ppt

Similar documents
Microsoft PowerPoint - swing2.ppt

PowerPoint Presentation

次の演習課題(1),(2)のプログラムを完成させよ

目 次 Java GUI 3 1 概要 クラス構成 ソースコード例 課題...7 i

ÿþ˜u#u·0¹0Æ0à0

PowerPoint Presentation

Assignment_.java /////////////////////////////////////////////////////////////////////// // 課題 星の画像がマウスカーソルを追従するコードを作成しなさい 次 ///////////////////

ガイダンス

ガイダンス

ガイダンス

Java 2 - Lesson01

ガイダンス

ガイダンス

Prog2_11th

I 4 p.2 4 GUI java.awt.event.* import /* 1 */ import mouseclicked MouseListener implement /* 2 */ init addmouselistener(this) this /* 3 */ this mousec

public class Kadai _02 { public static void main(string[] args) { MyFrame frame = new MyFrame("Kadai _02"); (2) フレームのクラス名は MyFrame とし 以下

awt の主要なクラスを下記に示す クラス Component Container Button Label Panel Frame 説明画面にユーザインターフェイス要素として表示し, ユーザとのやり取りを行うコンポーネントを表すすべてのコンポーネントのスーパークラスになる ほかのコンポーネントを含

Java言語 第1回

Prog1_12th

public class MyFrame { private JPanel panel1; private JPanel panel2; private JPanel panel3; private JPanel panel4; private JLabel label1; private JTex

<4D F736F F F696E74202D AC C8899E D834F E >

I. (i) Foo public (A). javac Foo.java java Foo.class (C). javac Foo java Foo (ii)? (B). javac Foo.java java Foo (D). javac Foo java Foo.class (A). Jav

ソフトウェア基礎演習 課題

Prog1_12th

Java 2 - Lesson01

text_12.dvi

問1

PowerPoint プレゼンテーション

アジェンダ 1 グラフィカルなインタフェース GUI(Graphical User Interface) の基礎 2 Swing を利用する Swing の基礎知識 2

B 10 : N ip2003f10.tex B : 9/12/ :02 p.1/71

Java言語 第1回

GUI プログラミング第 4 Graph ~ 手書認識と関数グラフ描画 ~ マウスで数式を書いて認識し 関数グラフを描画する < 手書認識とグラフ描画のステップ> ステップ 1_1 フレームの作成 ステップ 1_2 マウスで自由に線を書く ステップ 2-1 手書認識認識結果を標準出力する ステップ

: : : TSTank 2

第1章 ビジュアルプログラミング入門

< F2D B838A835882CC8CF68EAE2E6A7464>

以下に java.awt.graphics クラスの主なメソッドを示す (Graphics クラスの ) メソッド drawline(int x1, int y1, int x2, int y2) drawrect(int x, int y, int width, int height) fillr

< F2D834F838C A815B A CC>

Prog2_12th

Microsoft Word - Android_DI講座_画面800×1280

GUIプログラムⅣ

text_13.dvi

Microsoft Word - Java3.DOC

Java - Visual Editor

1 Java Java GUI , 2 2 jlabel1 jlabel2 jlabel3 jtextfield1 jtextfield2 jtextfield3 jbutton1 jtextfield1 jtextfield2 jtextfield3

手書認識 グラフ描画 Step2-2 手書認識 : 認識結果を PaintPanel で描画する < 属性付き文字列 AttributedString> 標準出力では分かりにくいうえに認識結果を使えないので 認識するごとに PaintPanel に文字を描画することにする ここで 数式はただの文字列

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

r14.dvi

PowerPoint プレゼンテーション

HCI プログラミング 8 回目ボタン チェックボックス ラジオボタン 今日の講義で学ぶ内容 ボタンとアクションイベント ボタンのカスタマイズ チェックボックスとラジオボタン ボタンとアクションイベント 1 ボタンを配置してみましょう ボタンは ラベルと同じようにフォントやその色 画像の貼り付けなど

プログラミング入門1

2

Java言語 第1回

Microsoft PowerPoint prog1_doc2x.pptx

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

10/31 Java AWTの基本構造(Frameクラスの継承) 演習課題資料

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

JavaプログラミングⅠ

IE6 2 BMI chapter1 Java 6 chapter2 Java 7 chapter3 for if 8 chapter4 : BMI 9 chapter5 Java GUI 10 chapter6 11 chapter7 BMI 12 chap

実行時のメモリ構造\(2\) Javaスタック内のフレーム間動作

/ ( ) 8/7/ :21 p.2/64

r2.dvi

ソフトウェア開発方法論2

Microsoft PowerPoint - prog13.ppt

HCI プログラミング 10 回目テキストフィールドとキーイベント 今日の講義で学ぶ内容 テキストフィールドの利用 キーイベントの処理 テキストフィールドの利用 1 テキストフィールドを配置してみましょう テキストフィールドを用いることにより 数値や文字列などのデータ入力が可能になります ソースファ

Microsoft PowerPoint ppt

PowerPoint プレゼンテーション

I. java.awt.rectangle java.lang.math random Java TM API java.awt Rectangle Rectangle (x,y)... public int x Rectangle X public int y Rectangle Y public

< F2D E E6A7464>

< F2D B825082CC96E291E82E6A7464>

基本情報STEP UP演習Java対策

GEC-Java

II Java :30 12:00 I. I IV II. III. IV. ( a d) V. : this==null, T == N A ActionListener C class D actionperformed G getsource I implements K

:30 12:00 I. I V II. III. IV. ( a d) V. VI : A ActionListener aa addactionlistener AE ActionEvent K KeyListener ak addkeyliste

Java言語 第1回

r3.dvi

Microsoft PowerPoint - OOP.pptx

2 static final int DO NOTHING ON CLOSE static final int HIDE ON CLOSE static final int DISPOSE ON CLOSE static final int EXIT ON CLOSE void setvisible

Animals サンプル Step3 張り付けた動物の上をクリックすると それぞれの鳴き声で鳴く その鳴く間 一定時間 ( ここでは 1 秒間 ) 画像が別のものに変わる <アニメーションの基礎 : タイマーについて> アニメーションは アプリケーションが指定する間 一定間隔でどんどん画像をおきかえ

リファレンス,配列 例外処理

PowerPoint プレゼンテーション

V8.1新規機能紹介記事

メソッドのまとめ

Microsoft PowerPoint - prog12.ppt

Microsoft PowerPoint - prog13.ppt

2008 e-learning T050050

Microsoft PowerPoint - prog11.ppt

JavaプログラミングⅠ

< F2D82518E9F8AD CC834F CC8CFC82AB82C68D4C>

Javaプログラムの実行手順

< F2D82518E9F8AD CC95BD8D7388DA93AE2E6A7464>

< F2D82B682E182F182AF82F12E6A7464>

< F2D8EA CE909482CC92EA82852E6A7464>

2

Microsoft PowerPoint - OOP.pptx

< F2D825282CC947B909482CC A815B83682E6A>

Prog2_9th

5 p Point int Java p Point Point p; p = new Point(); Point instance, p Point int 2 Point Point p = new Point(); p.x = 1; p.y = 2;

< F2D A838B838D96402E6A7464>

< F2D F B834E2E6A7464>

:30 12:00 I. I VII II. III. IV. ( a d) V. VI : this==null, T == N A ActionListener A addactionlistener C class D actionperforme

Transcription:

Java/Swing について (3) 2005 年 10 月 19 日 海谷治彦 1

目次 メニューと AbstractAction ダイアログ ファイルダイヤログ Inner Class ( 内部クラス ) Anonymous Inner Class ( 無名内部クラス ) GUI でもちっとはクラス図を使おう. 実行可能アーカイブ (jar) の作り方 エクリプス無しでも実行したい. 2

メニューと AbstractAction メニューをつけると それっぽい プログラムになります. 従来の Listener, Adapter ではなく, AbstractAction を使って, メニュー選択時の動作を設定することもできる. 例題参照. 3

ダイヤログ メインのウインドウとは別のウインドウを出して, 警告 確認 選択肢 簡単な文字列入力等ができるもの. Swing では,JOptionPane クラス内にある static メソッド ( クラスメソッド ) を利用することで, 異常に簡単に実現可能. 個人的にはウザいと思うこともある. 特に確認系のダイヤログとか. 4

警告 showmessagedialog() 入力エラーやプログラムの状態の不具合等をユーザーに警告するもの. 単にメインウインドウ ( の隅の方 ) に警告が出るよりわかりやすい. 5

警告の例 ボタンを押したら 押すな と警告するプログラム ( 涙 ) 6

確認 とりかえしのつかないこと等を実行する場合に, ホントにやっていいかを確認する場合など. showconfirmdialog() の返り値として, 0 はいの場合 1 いいえ 2 とりけし 7

確認の例 いきなりプログラムを停止するのではなく, とりあえず一度確認するとか. 8

ファイルについて 詳細は例題を参照. 9

Inner Class 内部クラス クラス内部で ( ローカルな ) クラスを定義できる. あるクラスの完全下請けなクラス ( イベントリスナー等 ) はコレで実装したほうがよいかもしれない. あるクラスの中に定義されているので, 親クラス内の属性にアクセスが許可されている. 10

public class Dialog4 { private static JPanel panel; 例 (static の場合 ) public static void main(string[] args) { JFrame frame=new JFrame(); frame.setsize(200,300); panel=(jpanel)frame.getcontentpane(); JButton b=new JButton("Quit"); b.addmouselistener(new D4Adapter()); panel.add(b, BorderLayout.NORTH); frame.setvisible(true); static class D4Adapter extends MouseAdapter{ public void mousepressed(mouseevent arg0) { int ans=joptionpane.showconfirmdialog(panel, "Really?"); if(ans==0) System.exit(1); 11

public class Dialog5 extends JFrame { private JPanel panel; Dialog5(){ super("5"); JFrame frame=new JFrame("4"); frame.setsize(200,300); panel=(jpanel)frame.getcontentpane(); frame.setvisible(true); 例 public void run(){ JButton b=new JButton("Quit"); b.addmouselistener(new D4Adapter()); panel.add(b, BorderLayout.NORTH); panel.validate(); public static void main(string[] args) { new Dialog5().run(); private class D4Adapter extends MouseAdapter{ public void mousepressed(mouseevent arg0) { int ans=joptionpane.showconfirmdialog(panel, "Really?"); if(ans==0) System.exit(1); 12

無名インナークラス 以下のような場合, 無名インナークラスを用いるのが良い. 1 回ポッキリしかインスタンスを作らない. 単にいくつかのメソッドを再定義するだけで済む. インスタンスを参照する場合, 実装しているインタフェースもしくはスーパークラスで受ける. 無名インナークラスのもとになるのはクラスでもインタフェースでもよい. 13

public class Dialog6 { private static JPanel panel; public static void main(string[] args) { JFrame frame=new JFrame("6"); frame.setsize(200,300); panel=(jpanel)frame.getcontentpane(); JButton b=new JButton("Quit"); 例 ( クラス拡張 ) b.addmouselistener( new MouseAdapter(){ public void mousepressed(mouseevent e){ int ans=joptionpane.showconfirmdialog(panel, "Really?"); if(ans==0) System.exit(1); ); panel.add(b, BorderLayout.NORTH); frame.setvisible(true); class XX extends MouseAdapter{ public void mousepressed(mouseevent e){ int ans=joptionpane.showconfirmdialog(panel, "Really?"); if(ans==0) System.exit(1); MouseAdapter a=new XX(); 14

public class Dialog7 { private static JPanel panel; public static void main(string[] args) { JFrame frame=new JFrame("7"); frame.setsize(200,300); panel=(jpanel)frame.getcontentpane(); JTextField t=new JTextField(20); 例 (IF 実装 ) t.addactionlistener( new ActionListener(){ public void actionperformed(actionevent e){ String s=((jtextfield)e.getsource()).gettext(); int ans=joptionpane.showconfirmdialog(panel, s); if(ans==0) System.exit(1); ); panel.add(t, BorderLayout.NORTH); frame.setvisible(true); class XX implements ActionListener{ public void actionperformed(actionevent e){ String s=((jtextfield)e.getsource()).gettext(); int ans=joptionpane.showconfirmdialog(panel, s); if(ans==0) System.exit(1); ActionListener a=new XX(); 15

内部クラスについての考察 推奨するか否かは微妙. 前述の例のように場合によっては手間が減る. インデントが深いので見難い. 変数 ( 属性 ) の可視スコープをうまく利用したプログラミング ( のサボリ ) ができる. 逆にスコープを理解してない読みにくくなる. 引数等で明示的にインスタンスへの参照を受け取る方法と相補的. どちらが良いかはケースバイケースだとおもふ. 16

クラス図からはじめよう GUI を作る場合, クラス図を用いて設計はしにくい. 主な部分は 見てくれ の部分だし. しかし, 特にイベントの流れに相当する部分はクラス図で把握しておくのもよいかもしれない. この実験で紹介した Swing の部品は, 基本的にデータの入出力に用いるものである. 計算を行うクラスは従来通りに設計する必要がある. 17

ソースコード 第 1 回から抜粋 public class Listener1 { public static void main(string[] args){ JFrame jf=new JFrame("Hello"); jf.setsize(300, 100); JPanel panel=new JPanel(); jf.setcontentpane(panel); JButton button=new JButton("Up"); panel.add(button); CounterLabel counter=new CounterLabel(); panel.add(counter); button.addmouselistener(counter); jf.setvisible(true); public class CounterLabel extends JLabel implements MouseListener { private int c=0; CounterLabel(){ super(0+""); public void mouseclicked(mouseevent arg0) { public void mouseentered(mouseevent arg0) { public void mouseexited(mouseevent arg0) { public void mousereleased(mouseevent arg0) { public void mousepressed(mouseevent arg0) { c++; settext(c+""); ボタン button のイベントをラベル counter が聞くように指示 ボタン系のイベントに対応して行う処理を, ラベル ( リスナー ) 内に実装. 18

第 1 回から抜粋参考までにクラス図 addmouselistener はココで定義されてる. 19

第 1 回から抜粋 相互の関係を網羅すると以下 20

第 1 回から抜粋ソースが複数の場合は? イベントソース押すと増える イベントソース押すと減る リスナー リスナー側で どこからの イベントかを判別しないといけない. 21

第 1 回から抜粋 ソース ( 抜粋 ) public class Listener2 { public static void main(string[] args){ JFrame jf=new JFrame("Hello"); jf.setsize(300, 100); JPanel panel=new JPanel(); jf.setcontentpane(panel); JButton up=new JButton("Up"); JButton down = new JButton("Down"); CounterLabel3 counter=new CounterLabel3(0, up, down); up.addmouselistener(counter); down.addmouselistener(counter); panel.add(up); panel.add(counter); panel.add(down); jf.setvisible(true); ポイントはリスナー側で, 複数あるソースの情報を保持していること. public class CounterLabel3 extends JLabel implements MouseListener { private int c=0; private JButton up; private JButton down; CounterLabel3(int x, JButton up, JButton down){ super(x+""); c=x; this.up=up; this.down=down; public void mousepressed(mouseevent arg0) { JButton b=(jbutton)arg0.getsource(); if(b==up){ c++; else if(b==down){ c--; settext(c+""); リスナー public void mousereleased(mouseevent arg0) { public void mouseclicked(mouseevent arg0) { public void mouseentered(mouseevent arg0) { public void mouseexited(mouseevent arg0) { 22

第 1 回から抜粋 クラス図 ココの情報保持があって, 複数のボタン ( ソース ) の区別をしている. 23

前 2 つの例のクラス図 ( 再 ) 第 1 回から抜粋 関連がない. 24

jar アーカイブ Eclipse が無くても J2SDK, JDK がなくても, JRE (Java Runtime Env.) があれば開発したアプリケーションを実行できる. 無論, クラスファイル全部をばらばらに配布しても良いのだが, 1 つのファイルにまとめておいたほうが扱いやすい. そのためのアーカイブ形式が jar 25

やり方 1 26

やり方 2 27