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

Similar documents
ガイダンス

ガイダンス

ガイダンス

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

ガイダンス

PowerPoint Presentation

ガイダンス

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

Java言語 第1回

Microsoft PowerPoint - swing2.ppt

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

Microsoft PowerPoint - prog12.ppt

Microsoft PowerPoint - OOP.pptx

PowerPoint Presentation

Prog1_12th

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

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

<4D F736F F F696E74202D AC C8899E D834F E >

ブロック崩し Step1 矢印キーで左右に動かせるパドルを描画する < パドルの表現方法 > パドルは java.awt パッケージの Rectangle という Java が用意しているクラスを使う これは四角形を表すクラスで 左上の点の座標と幅 高さをもっている (x, y) Rectangle

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

Java言語 第1回

Java言語 第1回

Prog1_12th

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

Prog2_11th

text_12.dvi

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

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

Microsoft PowerPoint - swing3.ppt

Java 2 - Lesson01

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

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

Java 2 - Lesson01

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

PowerPoint プレゼンテーション

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

Microsoft PowerPoint - prog11.ppt

GUIプログラムⅣ

< F2D E E6A7464>

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

text_13.dvi

< F2D B825082CC96E291E82E6A7464>

GEC-Java

Microsoft PowerPoint - prog11.ppt

r2.dvi

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

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

Microsoft PowerPoint ppt

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

2

< F2D B838A835882CC8CF68EAE2E6A7464>

< F2D82518E9F8AD CC834F CC8CFC82AB82C68D4C>

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 F B834E2E6A7464>

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

6 p.1 6 Java GUI GUI paintcomponent GUI mouseclicked, keypressed, actionperformed mouseclicked paintcomponent thread, 1 GUI 6.0.2, mutlithread C

< F2D834F838C A815B A CC>

< F2D825282CC947B909482CC A815B83682E6A>

自宅でJava言語の開発環境を作る方法

JavaプログラミングⅠ

PowerPoint プレゼンテーション

GUIプログラムⅤ

PowerPoint プレゼンテーション

Cir

< F2D82518E9F8AD CC95BD8D7388DA93AE2E6A7464>

< F2D A838B838D96402E6A7464>

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

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

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

< F2D89BA8EE882C E6A7464>

Safari AppletViewer Web HTML Netscape Web Web 15-1 Applet Web Applet init Web paint Web start Web HTML stop destroy update init Web paint start Web up

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

Microsoft PowerPoint - OOP.pptx

Microsoft PowerPoint prog1_doc2x.pptx

プログラミング基礎I(再)

Microsoft Word - Java4.DOC

JavaプログラミングⅠ

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

< F2D82518CC282CC D2E6A7464>

基本情報STEP UP演習Java対策

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

Animals サンプル Step 1 動物の種類を指定しておいて クリックした場所に画像を貼り付ける < レイアウトについて > 前回は ラベルやボタンの位置を座標で設定した Absolute Layout を選んだためである レイアウトは どのようにボタンなどのコンポーネントを配置するかを決定す

CodeGear Developer Camp

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

Microsoft Word - Java3.DOC

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

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

メディプロ1 Javaプログラミング補足資料.ppt

Javaの作成の前に

< F2D82B682E182F182AF82F12E6A7464>

MyEventHandler actionhandler = new MyEventHandler(); m.addeventhandler(actionevent.any, actionhandler); // レイアウト BorderPane を生成 / 設定します BorderPane bp

GUIプログラムⅡ

Microsoft PowerPoint prog1_doc2.pptx

2

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

I HTML HashMap (i) (ii) :.java import java.net.*; import java.io.*; import java.util.hashmap; public class SimpleStopWatch { public static voi

< F2D8EA CE909482CC92EA82852E6A7464>

JavaプログラミングⅠ

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

Transcription:

UML によるソフトウェア設計 Java プログラミング 2 1

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

1. グラフィカルなインタフェース ウィンドウの作成手順 1. ウィンドウ ( フレーム ) を作成する JFrame frame = new JFrame(); 2. ウィジェット ( ボタンなど ) を作成する JButton button = new Button( click me ); 3. ウィジェットをウィンドウに組み込む frame.getcontentpane().add(button); ウィジェットはウィンドウに直に組み込まず コンテンツペイン と呼ばれるオブジェクトに組み込む ウィンドウは 窓枠 ペインは ガラス のようなもの 4. 作成したウィンドウのサイズを指定し表示する frame.setsize(300, 300); frame.setvisible(true); Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 3

1.1. 実際のソースコード import javax.swing.*; swing パッケージをインポート public class SimpleGui1 { public static void main(string[] args) { JFrame frame = new JFrame(); JButton button = new JButton( click me ); } } frame.setdefaultcloseoperation(jframe.exit_on_close); このように書くと ウィンドウを閉じると同時にプログラムが終了 frame.getcontentpane().add(button); frame.setsize(300, 300); frame.setvisible(true); ボタンが大きい Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 4

1.2. イベント処理 SimpleGui1 クラスは ボタンをクリックしても何も起きない 何か処理を行わせるには以下の 2 つが必要 1. ユーザがボタンをクリックした時に自動的に呼び出されるメソッド 2. ユーザがボタンをクリックしたこと ( イベント ) を検知し メソッドを呼び出す手段 1. ユーザがクリックしたら伝えて欲しい と指示 プログラム ボタンオブジェクト 2. イベントの発生が知らされる Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 5

1.3. リスナインタフェース 前のページの プログラム とは リスナインタフェース と呼ばれるインタフェースを実装したもの イベントリスナ ( 上記実装 ) を作れば イベントソース ( ボタンなど ) からイベント ( オブジェクト ) を受け取ることができる << インタフェース >> ActionListener actionperformed(actionevent ev) << インタフェース >> ItemListener itemstatechanged(itemevent ev) << インタフェース >> KeyListener keypressed(keyevent ev) keyreleased(keyevent ev) keytyped(keyevent ev) Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 6

1.4. リスナとソースのコミュニケーション リスナのリストに追加してください クリックされたら actionperformed() メソッドを呼んでください button.addactionlistener(this) actionperformed(the Event) イベントソース イベントリスナ わかりました リスナのリストに追加します クリックされたら actionperformed() メソッドを呼び出します Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 7

1.5. ActionEvent の扱い テキスト 360 ページのソースコード参照 1.ActionListener インタフェースを実装する 2. リスナをボタンに登録する ( これで イベントを受け取りたい という意志がイベントソースに伝わる ) 3. イベント処理のためのメソッド (ActionListener インタフェースを使う場合は actionperformed() メソッド ) を実装する Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 8

1.6. リスナ ソース イベント ソースはイベントオブジェクトを送る リスナはイベントオブジェクトを受け取る イベントオブジェクトはイベントに関する情報を保持するイベントオブジェクト Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 9

1.7. 描画パネル 描画パネル とは プログラマが自ら図形を描いたりすることができるウィジェット JPanel クラスを継承して paintcomponent() メソッドをオーバライドする import java.awt.*; import javax.swing.*; 両方必要 public class MyDrawPanel extends JPanel { public void paintcomponent(graphics g) { Graphics2D g2d = (Graphics2D)g; Graphics2D クラスは Graphics クラスのサブクラス } g2d.setcolor(color.orange); g2d.fillrect(20, 50, 100, 100); } g2d は描画を行う機械のようなもの Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 10

1.8. イベントと図形の描画 1. 描画パネルとボタンの 2 つのウィジェットを備えたフレームが画面に表示される ボタンには イベントリスナが登録され クリックに対応できる状態になる 2. ボタンをクリックすると イベントオブジェクトが自動で作成され イベントリスナのメソッド ( イベントハンドラ ) が呼び出される 3. イベントハンドラがフレームオブジェクトの repaint() メソッドを呼び出す すると システムによって描画パネルオブジェクトの paintcomponent() メソッドが呼び出される 4. paintcomponent() メソッドによって円の色が変更される ( 色は無造作に選ばれる ) Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 11

1.9. 実際のソースコード テキスト 371 ページ参照 参考 : フレームのレイアウト north frame.getcontentpane().add(drawpanel); west center east このように書くとデフォルトで center に描画パネルが配置されるが south 通常は このように配置する領域を指定する frame.getcontentpane().add(borderlayout.center, drawpanel); Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 12

1.10. ボタンを 2 つにする 扱うイベントが 2 つになる ラベルを変更するボタン ラベル 円の色を変化させるボタン Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 13

1.11. 複数のイベント扱う方法 1.actionPerformed() メソッドを 2 つ作るこのようなコードは実際に書けない 2.2 つのボタンに同じリスナを登録する正しく動作するが オブジェクト指向的 ではない 3. イベントリスナを 2 つ作る ( 別クラスとして ) リスナオブジェクトは frame や label といった変数にアクセスできない 3. はいいアイディアだが インスタンス変数にアクセスするのが大変 何かよい方法は Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 14

1.12. 内部クラス 内部クラス とはクラスの中に作られたクラス class MyOuterClass { } class MyInnerClass {... } 内部クラスで外部クラスの変数を利用する class MyOuterClass { private int x; } class MyInnerClass { void go() { x = 42; 変数 x は内部クラス } の変数と同じように } 使用できる 内部クラスでは 外部クラスの変数やメソッドを利用する際 たとえ private 宣言されていても自らのものと同様に利用できる Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 15

1.13. 内部クラスと外部クラスの関係 1. 外部クラスのオブジェクトを作成する 2. 既に作成した外部オブジェクトを使って内部オブジェクトを作成する 3. これにより 外部オブジェクトと内部オブジェクトは緊密に結びつく MyOuter オブジェクト MyInner オブジェクト MyOuter オブジェクト int x String s MyInner オブジェクト Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 16

1.14. 修正されたプログラム テキスト 379 ページ参照 2 つのリスナクラス TwoButtons 外部クラス 内部クラス 内部クラス 円の色を変化させるためのリスナクラス (ColorListener) ラベルを変更するためのリスナクラス (LabelListener) Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 17

Swing の基礎知識 2. Swing を利用する Swing コンポーネント コンポーネント とは ウィジェット とほぼ同義語 コンポーネントの多くが javax.swing.jcomponent を継承するオブジェクト JButton JCehckBox JTextField インタラクティブなコンポーネント 他のコンポーネントの 容れ物 となるコンポーネント ( バックグラウンドコンポーネント ) JFrame JPanel Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 18

Swing の基礎知識 2.1. レイアウトマネージャ レイアウトマネージャ は あるコンポーネントに他のコンポーネントが組み込まれる際 そのサイズや配置などを決定するオブジェクト パネル B のレイアウトマネージャは 3 つのボタンのサイズと配置を決める ボタン 1 ボタン 2 ボタン 3 パネル B パネル A のレイアウトマネージャはパネル B のサイズと配置を決める (3 つのボタンには一切関知しない ) パネル A Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 19

Swing の基礎知識 2.2. レイアウトの手順 1. パネルが作成され ボタンが組み込まれる 2. パネルのレイアウトマネージャが サイズに関するボタン側の要望を確認する 3. パネルのレイアウトマネージャが 自らのレイアウトルールに基づき ボタン側の要望をどの程度受け入れるかを決定する 4. パネルがフレームに組み込まれる 5. フレームのレイアウトマネージャが サイズに関するパネル側の要望を確認する 6. フレームのレイアウトマネージャが 自らのレイアウトルールに基づき パネル側の要望をどの程度受け入れるかを決定する Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 20

Swing の基礎知識 2.3. レイアウトマネージャの種類 BorderLayout バックグラウンドコンポーネントを 5 つの領域に分割するレイアウトマネージャ 各領域に組み込めるコンポーネントは 1 つ フレームのデフォルトレイアウトマネージャ FlowLayout コンポーネントは組み込まれた順に左から右に並べられる 右端に到達すると自動的に改行される パネルのデフォルトレイアウトマネージャ BoxLayout FlowLayout と似ているが コンポーネントを縦あるいは横に並べることができる ( 意図的に改行が できる ) 上記以外にもいくつかレイアウトマネージャがある Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 21

Swing の基礎知識 2.4. さまざまな Swing コンポーネント JTextField JTextArea JCheckBox JList Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 22

Swing の基礎知識 2.5. JTextField コンストラクタ JTextField field = new JTextField(20); // 20 文字分の長さ指定 JTextField field = new JTextField( Your name ); API の例 1field.getText(); // テキストの抽出 2field.setText( text ); // テキストの入力 3field.addActionListener(myActionListener); // Enter キーを押したイベントを処理するリスナの登録 4field.selectAll(); // テキストを選択 ( ハイライト表示 ) 5field.requestFocus(); // フォーカスをあてる Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 23

Swing の基礎知識 2.6. JTextArea コンストラクタ JTextArea text = new JTextArea(10, 20); // 10 行 20 文字分の領域を指定 API の例 1JScrollPane scroller = new JScrollPane(text); 2scroller.setVerticalScrollBarPolicy( 2 ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 2scroller.setHorizontalScrollBarPolicy( 2 ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 2panel.add(scroller); // 縦のスクロールバーのみを持つテキストエリアを作成 2text.setText( text ); // テキストの変更 3text.append( text2 ); // テキストの追加 4text.selectAll(); // テキストを選択 ( ハイライト表示 ) 5text.requestFocus(); // フォーカスをあてる Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 24

Swing の基礎知識 2.7. JCheckBox コンストラクタ JCheckBox check = new JCheckBox( CheckBox ); API の例 1check.addItemListener(this); // チェックが ON/OFF されたイベントを処理するリスナの登録 2public void itemstatechanged(itemevent ev) { 2 String onoroff = off ; 2 if (check.isselected()) onoroff = on ; 2 System.out.println( CheckBox is + onoroff); 2} // イベントを処理する 3check.setSelected(true); // チェックを ON にする 2check.setSelected(false); // チェックを OFF にする Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 25

Swing の基礎知識 2.8. JList コンストラクタ String[] listentries = { alpha, beta, gamma, delta }; JList list = new JList(listEntries); API の例 1JScrollPane scroller = new JScrollPane(list); 2scroller.setVerticalScrollBarPolicy( 2 ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 2scroller.setHorizontalScrollBarPolicy( 2 ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 2panel.add(scroller); // 縦のスクロールバーのみを持つリストを作成 2list.setVisibleRowCount(3); // 表示行の指定 3list.addListSelectionListener(this); // リストが選択されたイベントを処理するリスナの登録 4public void valuechanged(listselectionevent lev) { 4 if (!lev.getvalueisajusting()) { 4 String selection = (String)list.getSelectedValue(); 4 System.out.println(selection); 4} // イベントの処理 ( 選択されている項目を表示 ) Copyright(c) 2007 University of Tsukuba and Sun Microsystems, Inc. All rights reserved. 26