Java/Swingについて (2) 2005年10月11日 海谷 治彦.

Slides:



Advertisements
Similar presentations
独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
Advertisements

Ver 準備 Java フォルダに移動して …… mkdir Swing Swing フォルダに移動して …… cp ~gundam/Java/Swing. コマンドプロンプト ( JDK ) でないと起動 しないので注意!!!
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
社会人学習講座 「Javaプログラミング概論」
GridLayout オブジェクト(省略)
         第9回 Swing.
Applet 岡部 祐典 鈴木 敬幸.
GUIコンポーネントの設定と配置 Creation and positioning of GUI components
JAVA GUIプログラミング 第6回 TextFieldとLabel.
アルゴリズムとデータ構造1 2007年6月12日
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
Javaのインタフェース についての補足 2006年5月17日 海谷 治彦.
Javaレクチャー ーSwing入門ー.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
 Applet アプレット ◇長い長いアプレット講座◇.
第14回 GUIの構成とイベント・ドリブン ~GUIを使ったプログラム(Ⅰ)~.
繰り返し プログラミング 第4回 繰り返し プログラミング第4回.
JAVA GUIプログラミング 第5回 ボタンとそのイベント処理.
システムエンジニアリング演習 GUIの実現(3):Swing 11月20日.
社会人学習講座 「Javaプログラミング概論」
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
アプレット プログラミング 第10回 アプレット プログラミング第10回.
第11回 GUI(グラフィカル・ユーザ・インターフェース)の設計
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
プログラミング演習3 第2回 GUIの復習.
実行時のメモリ構造(2) Javaスタック内動作他
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
JAVA入門後期⑨ JAVAのSwingのメニュー処理
プログラミング演習3 第3回 ミニプロジェクト.
オブジェクト指向基礎学習Ⅱ 平成19年6月20日 森田 彦.
アルゴリズムとデータ構造演習(6月24日) グラフィックス、その2 テキストフィールドで入力する チェックボックスで1つ以上指定する
ライブラリを利用したGUI の実現(2):Swing 11月12日
アルゴリズムとプログラミング (Algorithms and Programming)
JAVA入門後期⑦ JAVAのSwingの基本構造
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
第7回独習Javaゼミ セクション 1~4 発表者 直江 宗紀.
リファレンスの復習と例外処理 2005年6月14日 海谷 治彦.
リファレンス,配列,例外処理 その他演習に役立つこと
第15回独習Javaゼミ セクション14~15 発表者 直江宗紀.
プログラミング演習3 第3回 ミニプロジェクト.
暗黙的に型付けされる構造体の Java言語への導入
第6回 2007年6月1日 応用Java (Java/XML).
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
プログラミング演習3 第2回 GUIの復習.
プログラミング基礎a 第10回 Javaによる図形処理入門(2) GUIの使い方
Java/Swingについて (3) 2005年10月19日 海谷 治彦.
11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS.
比較プログラム言語論 平成16年7月21日 森田 彦.
クラスファイルの構造解析(2) 2003年6月23日 海谷 治彦.
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
JAVA入門後期⑥ JAVAのAWTの基本構造 (レイアウトマネージャー、 ウインドウ型アプリケーション)
Java/Swingについて+ (4) 2005年10月26日 海谷 治彦.
プログラミング基礎a 第10回 Javaによる図形処理入門(2) GUIの使い方
パッケージ,アクセス修飾子 2008年4月27日 海谷 治彦.
JAVA入門後期④ イベント、AWT、の基本構造、スレッド
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
JAVA GUIプログラミング 第3回 イベント処理① マウスイベント.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
C#プログラミング実習 第3回.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
GUI部品とイベント処理の例 マインスィーパもどきの作成 倉敷芸術科学大学 産業科学技術学部 梶浦文夫.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
5.基本API 5-1 レイアウト ウィジェットの並べ方を指定するには、 パレットのレイアウト(Layoutでは以下の8種類)を配置する。
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Presentation transcript:

Java/Swingについて (2) 2005年10月11日 海谷 治彦

目次 Adapterについて TextField TextArea JList JComboBox JScrollPane Copy&Paste JList JComboBox JScrollPane レイアウトについて

ソースコード 前回より抜粋 使ってないメソッドも記述しないといけないのは無駄,とはいえJavaの文法上省けない. 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+""); } 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); } 使ってないメソッドも記述しないといけないのは無駄,とはいえJavaの文法上省けない.

Adapter Listenerを空実装してあるクラス コイツのサブクラスを作成すれば必要なメソッドのみオーバーライドすればよい. 詳細はマニュアルページを見て

ソース mousePressed以外は実装していない.(スーパークラスで空実装されている) public class MouseLabelAdapter extends MouseAdapter { private JLabel label; private int counter=0; MouseLabelAdapter(JLabel label){ this.label=label; } public void mousePressed(MouseEvent e){ counter++; label.setText(counter+""); public class Adapter1 { public static void main(String[] args) { JFrame frame=new JFrame(); frame.setSize(300,100); JPanel panel=new JPanel(); frame.setContentPane(panel); JButton button=new JButton("Up"); JLabel label=new JLabel("0"); panel.add(button); panel.add(label); MouseLabelAdapter adapter=new MouseLabelAdapter(label); button.addMouseListener(adapter); frame.setVisible(true); } mousePressed以外は実装していない.(スーパークラスで空実装されている)

クラス図

JTextField 一行入力のための部品 初期化の方法はいろいろ 文字幅を指定 初期文字列を指定等 interface ActionListenerによってエンターキー入力を検知できる.

例1

例2: 入力をラベルに渡す 非常に安直にユーザーのテキスト入力を得られる. (多分,標準入力を使うよりかなり楽) テキスト を入力 エンター キーを 押す 非常に安直にユーザーのテキスト入力を得られる. (多分,標準入力を使うよりかなり楽)

JTextArea それ自身,小さなテキストエディタのようなもの.

例: Field入力をAreaに溜める

Copy&Pasteはプログラミングが必要 public class ClipAdapter extends MouseAdapter { JButton copy; JButton paste; JTextArea area; ClipAdapter(JTextArea area, JButton copy, JButton paste){ this.area=area; this.copy=copy; this.paste=paste; } public void mousePressed(MouseEvent e){ JButton b=(JButton)e.getSource(); if(b==copy){ area.copy(); }else if(b==paste){ area.paste(); public class Text4 { public static void main(String[] args) { // 中略 JButton copy=new JButton("Copy"); JButton paste=new JButton("Paste"); JTextArea area=new JTextArea(10, 30); ClipAdapter clip=new ClipAdapter(area, copy, paste); copy.addMouseListener(clip); paste.addMouseListener(clip); panel.add(copy); panel.add(paste); panel.add(new JScrollPane(area)); frame.setVisible(true); }

画面例 かっちょいいメニュー(例: 左図)でCopy&Pasteできるようにするには, それなりにコードをかかないといけない. とはいえ,ショートカットキーは有効.

JList 複数の選択肢を列挙するための部品. 単一選択,複数選択の双方ができる. 無論,選択した項目を取り出せる. 今回は単一選択しか扱わない. 無論,選択した項目を取り出せる. ListSelectionListener

JComboBox JListと用途は似ており,項目選択に使える.

選択した項目を得られます

スクロールバー JScrollPane()クラスで包むとスクロール可能となる. ただし,なんでもスクロールできるわけでない. インタフェース Scrollableを実装した部品. もしくは,「望ましい」サイズが設定されている部品. javax.swing.JComponent.getPreferredSize()およびsetPreferredSize() メソッド参照.

スクロールできそうな部品

例 import javax.swing.*; public class Scroll2 { public static void main(String[] args) { JFrame frame=new JFrame(); frame.setSize(300,200); JTextArea area=new JTextArea(10,40); JScrollPane scroll=new JScrollPane(area); frame.getContentPane().add(scroll); frame.setVisible(true); } 包まないと下のようになる

部品のレイアウト制御 add()で追加された部品が,左から右に追加されるだけでは芸がない. LayoutManagerを実装したクラスを使って,いくつかのレイアウトを指定することができる. 残念ながらSwing内のレイアウトの種類は多彩とは言い難い.

レイアウトの例 FlowLayout BorderLayout GridLayout 1 2 3 北 4 5 西 中 東 南 碁盤の目のようにつめる 東西南北中の範囲で位置指定可能 JFrameのデフォルトPaneはこのレイアウト JPanelではデフォルト BoxLayout CardLayout 1 1 1 1 縦もしくは横一列に並べる. スライドやトランプのように重ねて表示.

レイアウト設定の手順 なんとかLayoutのインスタンスを作る. それを,setLayout()メソッドに与える. 本メソッドはContainerクラスで定義されてる.

例 BorderLayout

例 GridLayout まぁ,ありがちの例だが・・・

swingパッケージに含まれることに注意 例 BoxLayout swingパッケージに含まれることに注意

例 Layoutの入れ子 NORTHにはFlowLayoutでボタンを9個単純に並べた. WESTにはBoxLayoutでボタンを縦に9個単純に並べた. 直接ボタンをSOUTHにのせると一杯に広がる 全体はBorderLayout (デフォルトのまま)

ソース public class Layout5 { public static void main(String[] args) { JFrame frame=new JFrame(); frame.setSize(600, 400); JPanel panel=(JPanel)frame.getContentPane(); // レイアウトはデフォのBorderを利用 JPanel npanel=new JPanel(); // レイアウトはデフォルトのFlowを利用 JPanel wpanel=new JPanel(); wpanel.setLayout(new BoxLayout(wpanel, BoxLayout.Y_AXIS)); for(int i=0; i<3; i++) for(int j=0; j<3; j++){ npanel.add(new JButton(i+"x"+j)); wpanel.add(new JButton(i+"-"+j)); } panel.add(npanel, BorderLayout.NORTH); panel.add(wpanel, BorderLayout.WEST); panel.add(new TextArea(20,40), BorderLayout.CENTER); panel.add(new JButton("push me"), BorderLayout.SOUTH); frame.setVisible(true);

レイアウトの無効化 既存のレイアウトは,任意の場所にボタン等を配置することを許さない. ボタン等を任意配置したい場合は,レイアウト自体を無効化する必要がある. 無効化すると,配置場所だけでなく,サイズも含めて,手動で設定しないといけない (ので少し面倒). 例題: web page参照 単にレイアウトを無効化 マウスに追従する部品 上記とScrollPaneの連携

まとめ CGIページのような部品は一通り紹介した. これらの部品間にイベント送付の関係をつければ,そこそこ快適な入出力機能(ユーザーインタフェース)が作成可能.