最初に

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

シミュレーションの簡単な例 GUI 無しのシミュレーションを作る GUI を作る パラメタを設定するデモンストレーションをする 2 オブジェクト指向プログラミング特論

ガイダンス

ガイダンス

ガイダンス

ガイダンス

Prog1_12th

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

Prog2_11th

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

ガイダンス

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

PowerPoint Presentation

グラフを表すデータ構造 Javaでの実装

GUIプログラムⅣ

Java 2 - Lesson01

Java言語 第1回

Java言語 第1回

Graphical User Interface 描画する

Prog1_12th

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

Java - Visual Editor

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

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

PowerPoint Presentation

PowerPoint プレゼンテーション

<4D F736F F F696E74202D AC C8899E D834F E >

Microsoft PowerPoint - swing3.ppt

PowerPoint プレゼンテーション

Microsoft PowerPoint - OOP.pptx

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

< F2D B838A835882CC8CF68EAE2E6A7464>

文字列操作と正規表現

< F2D B825082CC96E291E82E6A7464>

< F2D E E6A7464>

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

Microsoft PowerPoint - prog12.ppt

< F2D834F838C A815B A CC>

Java言語 第1回

PowerPoint プレゼンテーション

C#の基本

Microsoft PowerPoint - swing2.ppt

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

Microsoft PowerPoint - prog13.ppt

IT プロジェクト

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

Microsoft PowerPoint - prog13.ppt

Prog2_12th

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

データ構造とアルゴリズム論

PowerPoint プレゼンテーション

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

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

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

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

ウィンドウの構成ウィンドウはタイトルバーとウィンドウ枠からなります タイトルバーには最小化 / 最大化ボタンや閉じるボタンがあります また ウィンドウはクライアント領域をもちます クライアント領域にはボタンなど GUI 部品が配置されます GUI 部品配置 ( レイアウト ) ウィンドウ ( ステー

Microsoft PowerPoint ppt

text_12.dvi

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

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

< F2D82B682E182F182AF82F12E6A7464>

. IDE JIVE[1][] Eclipse Java ( 1) Java Platform Debugger Architecture [5] 3. Eclipse GUI JIVE 3.1 Eclipse ( ) 1 JIVE Java [3] IDE c 016 Information Pr

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

GUIプログラムⅤ

Microsoft PowerPoint - OOP.pptx

Microsoft PowerPoint pptx

< F2D8EA CE909482CC92EA82852E6A7464>

< F2D F B834E2E6A7464>

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

2

Thread

Java言語 第1回

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

Microsoft PowerPoint - prog03.ppt

JAVA とテンプレート

第 1 章 : はじめに RogueWave Visualization for C++ の Views5.7 に付属している Views Studio を使い 簡単な GUI アプリケーションの開発手順を紹介します この文書では Windows 8 x64 上で Visual Studio2010

< F2D A838B838D96402E6A7464>

< F2D82518E9F8AD CC95BD8D7388DA93AE2E6A7464>

PowerPoint プレゼンテーション

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

Microsoft PowerPoint - chap10_OOP.ppt

VB.NET解説

< F2D82518CC282CC D2E6A7464>

Microsoft PowerPoint ppt

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

Javaの作成の前に

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

< F2D92DE82E8914B82CC977088D32E6A7464>

今回の内容 グラフとオブジェクト指向プログラミング Java を使う理由 Java の基本 Javaのライブラリ 開発 実行 クラスの再利用 クラス継承 抽象クラス 開発の要点

< F2D825282CC947B909482CC A815B83682E6A>

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

Microsoft Word - サンプル _図面編集_.doc

問1

PowerPoint プレゼンテーション

Microsoft Word - VB.doc

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


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

(Microsoft Word - java\221n\221\242\203\214\203|\201[\203g.doc)

オブジェクト指向プログラミング・同演習 5月21日演習課題

Transcription:

Graphical User Interface widget を使う オブジェクト指向プログラミング特論 2016 年度 只木進一 : 工学系研究科

Java と GUI 多くのプログラミング言語では GUI は言語とは別のライブラリ 例 :c/c++ と X11 GTK プラットフォーム依存 Java では GUI ライブラリが言語と同封されて配布 プラットフォーム独立 各プラットフォームのウィンドウマネージャ利用可

OOP としての GUI GUIは様々な部品 (widget) で構成 部品毎に属性と操作 属性 : 色 大きさ etc. 操作 : 動作 属性変更 表示 etc. 基本部品はライブラリ化 拡張して使用

java.awt Abstract Window Toolkit 基本グラフィックス 色 (Color) 線の属性 (BasicStroke) フォント 基本 widget パネル ボタンなど部品群 基本イベント (java.awt.event) マウス キーボード widget の属性変化

java.awt の widgets 階層 java.lang.object java.awt.component java.awt.button java.awt.canvas java.awt.checkbox java.awt.choice java.awt.basicsplitpanedivider java.awt.panel java.applet.applet java.awt.scrollpane java.awt.container java.awt.labet java.awt.list java.awt.scrollbar java.awt.textcomponent java.awt.window java.awt.dialog java.awt.frame

java.awt から javax.swing へ 部品の充実 プラットフォームからの完全独立 ウィンドウマネージャーとの連携 Look-and-Feelの分離 軽量化 スレッド対応 イベント間通信

javax.swing のクラス階層 java.lang.object java.awt.component java.awt.container javax.swing.jcomponent

javax.swing のクラス階層 javax.swing.jcomponent javax.swing.abstractbutton javax.swing.jbutton javax.swing.jmenuitem javax.swing.jcombobox javax.swing.jtogglebutton javax.swing.jfilechooser javax.swing.jlabel javax.swing.jlist javax.swing.jpanel

swing コンポーネントの役割 javax.swing.jframe アプリケーションのメインウィンドウ javax.swing.jpanel 様々な widget の台 図形描画 javax.swing.jbutton ボタン javax.swing.jlabel 文字ラベル

例 : 動作の無い GUI: 編集画面 widget 一覧 widget の階層 選択した widget の属性

NetBeans で GUI を作る 通常と同様にプロジェクトを作成する JFrame 作成 新規 JFrame フォーム レイアウト設定 : ボーダーレイアウト JFrame クラスを拡張して利用

widget の配置 マウスによる配置 ナビゲーション ウィンドウ内で パレットからドラッグ JPanel 作成 レイアウト設定 widget 配置 widget 動作設定

GUI を作る時の注意 GUI の配置情報はクラス名.form ファイルに クラス名.java ファイルからは編集できない部分がある 部品を拡張した自分のクラスも操作できる 実際の作成デモンストレーション

サンプルプログラム 動作の無い GUI guiwithoutaction 動作の有る GUI guiwithaction ファイルの選択 filechooser タイマー simpletimer

guiwithoutaction 階層構造 JFrame JButton JComboBox 配置し テキストや色を設定

guiwithoutaction: ソース コード前半 package guiwithoutaction; public class MainFrame extends javax.swing.jframe { // メニュー public enum MENU { MENU1, MENU2, MENU3; /** Creates new form MainFrame */ public MainFrame() { initcomponents(); /** メニューの設定 */ for (MENU m : MENU.values()) { jcombobox1.additem(m); pack(); initcomponents() は要素を配置するメソッド 自動生成されている

guiwithoutaction: ソース コード後半 public static void main(string args[]) { java.awt.eventqueue.invokelater(new Runnable() { public void run() { new MainFrame().setVisible(true); ); // Variables declaration - do not modify private javax.swing.jpanel buttons; private javax.swing.jbutton jbutton1; private javax.swing.jcombobox<menu> jcombobox1; // End of variables declaration

自動的に生成されているコード // <editor-fold defaultstate="collapsed" desc="generated Code"> private void initcomponents() { buttons = new javax.swing.jpanel(); jbutton1 = new javax.swing.jbutton(); jcombobox1 = new javax.swing.jcombobox<menu>(); widget の生成 setdefaultcloseoperation(javax.swing.windowconstants.exit_on_close); jbutton1.settext("jbutton1"); buttons.add(jbutton1); buttons への配置 buttons.add(jcombobox1); getcontentpane().add(buttons, java.awt.borderlayout.center); pack(); // </editor-fold> buttons を配置

レイアウトマネージャ JFrame や JPanel 内の widget の配置を管理 java.awt.borderlayout north ( 上端 ) south ( 下端 ) east ( 右端 ) west ( 左端 ) および center ( 中央 ) の領域に widget を配置 java.awt.flowlayout widget を一方向に配置 java.awt.gridbaglayout 矩形グリッドに widget を配置

ボタンの動作を定義する widget には イベントを扱う機能がある ボタンなどに actionlistener を設定する action を定義する

widget をダブルクリックして動作を定義 NetBeans で GUI の動作を定義

動作定義の例 : ボタンの動作 private void initcomponents() { // 省略 jbutton1.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(java.awt.event.actionevent evt) { jbutton1actionperformed(evt); ); // 省略 private void jbutton1actionperformed(java.awt.event.actionevent evt) { System.out.println("jButton1 が押されました ");

動作記述 private void jbutton1actionperformed(java.awt.event.actionevent evt) { System.out.println("jButton1 が押されました "); private void jcombobox1actionperformed(java.awt.event.actionevent evt) { MENU m = (MENU) jcombobox1.getselecteditem(); System.out.println(m.toString() + " が選ばれました "); private void jslider1statechanged(javax.swing.event.changeevent evt) { int v = jslider1.getvalue(); System.out.println("jSlider1 の値が " + String.valueOf(v) + " になりました ");

例 : ファイル選択 機能 ファイルを選択する テキストとして表示する ファイルを保存する エラーダイアログを表示する

open ボタンの動作 private void openactionperformed(java.awt.event.actionevent evt) { //file chooser を生成し テキストファイルに限定 JFileChooser chooser = new JFileChooser(); chooser.setcurrentdirectory(dir); chooser.setfilefilter(new FileNameExtensionFilter("Text File", "txt")); int returnval = chooser.showopendialog(this);// ダイアログの表示 if (returnval == JFileChooser.APPROVE_OPTION) { File file = chooser.getselectedfile(); textarea.settext(fileutil.openfile(file)); textarea.setvisible(true); filenamelabel.settext(file.getname()); dir = file.getparentfile();

save ボタンの動作 private void saveactionperformed(java.awt.event.actionevent evt) { JFileChooser chooser = new JFileChooser(); chooser.setcurrentdirectory(dir); chooser.setfilefilter(new FileNameExtensionFilter("Text File", "txt")); int returnval = chooser.showsavedialog(this); if (returnval == JFileChooser.APPROVE_OPTION) { File file = chooser.getselectedfile(); FileUtil.saveFile(file, textarea.gettext()); filenamelabel.settext(file.getname()); dir = file.getparentfile();

標準のファイル選択 GUI javax.swing.jfilechooserクラス 標準的ファイル選択画面を生成 選択状態 選択したファイルの情報 FileNameExtensionFilter を使う 拡張子での制限が可能になる

ファイル操作のクラス FileUtil として別に分けている 再利用可能 インスタンスを生成しない 全てを static で定義 機能 ファイルから文字列を読み込む ファイルに文字列を保存する 書き込み可能性を確認する ダイアログを表示する ファイル名の拡張子を得る

ダイアログの生成 static public void showerror(string message) { JOptionPane.showMessageDialog( new JFrame(), message, " エラー発生 ", JOptionPane.ERROR_MESSAGE); static public void showmessage(string message) { JOptionPane.showMessageDialog( new JFrame(), message, " メッセージ ", JOptionPane.INFORMATION_MESSAGE);

例 : タイマー ボタン 開始 停止のトグルボタン 終了ボタン 制限時間設定ボタン タイマー本体 JLabel の継承クラス 時刻を表示 時間設定パネル 分 秒を設定 JOptionPane に組み込む

タイマー本体 :Timer JLabel の継承クラス 時間を文字列にして表示 インターフェイス Runnable を実装 スレッドとして 自律的に時間を進める 開始時の時刻 now と現在の時刻との差 秒に変換 文字列に変換して表示

本体 :SimpleTimer START/STOP のトグルボタン Timer クラスに start/stop を送る QUIT ボタン 終了 SET ボタン Dialog を表示して 制限時間を設定

制限時間設定パネル : SetTimePanel JOptionPane の message object として使う 分と秒を設定するテキストフォーム OK ボタンを押すとダイアログが閉じる 上記の分と秒を読みだす

制限時間設定パネルの表示 private void settimeactionperformed(java.awt.event.actionevent evt) { // 停止する toggle.setselected(false); toggle.settext("start"); timerlabel.stop(); // 設定用 Dialog の表示 int answer = JOptionPane.showOptionDialog(new JFrame(), settimepanel, " 時間設定 ", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null); if(answer == JOptionPane.OK_OPTION){ //OK が押されたときに 制限時間を設定 int m = settimepanel.getminute(); int s = settimepanel.getsecond(); timerlabel.setmax(60*m+s); else { settimepanel.setdefault();