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

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

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

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

ガイダンス

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

ガイダンス

ガイダンス

Java言語 第1回

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

Java言語 第1回

Java 2 - Lesson01

Microsoft PowerPoint - swing2.ppt

Microsoft PowerPoint - prog13.ppt

Microsoft PowerPoint - prog13.ppt

2

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

PowerPoint Presentation

text_12.dvi

< F2D B838A835882CC8CF68EAE2E6A7464>

GUIプログラムⅤ

< F2D834F838C A815B A CC>

ガイダンス

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

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

ガイダンス

PowerPoint Presentation

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

< F2D B825082CC96E291E82E6A7464>

< F2D E E6A7464>

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

text_13.dvi

Microsoft PowerPoint - swing3.ppt

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

Prog2_10th

< F2D82518E9F8AD CC834F CC8CFC82AB82C68D4C>

GUIプログラムⅣ

< F2D A838B838D96402E6A7464>

Microsoft PowerPoint - prog12.ppt

Microsoft PowerPoint - prog09.ppt

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

< F2D825282CC947B909482CC A815B83682E6A>

Microsoft PowerPoint - prog09.ppt

Java プログラミング講習会 第 2 回 芝浦工業大学工学部情報工学科杉本徹 2017 年 3 月 27 日 public class Person { String familyname; String firstname; int age; } public void print() { Sy

2

< F2D F B834E2E6A7464>

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

< F2D82B682E182F182AF82F12E6A7464>

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

GUIプログラムⅡ

< F2D82518E9F8AD CC95BD8D7388DA93AE2E6A7464>

< F2D8EA CE909482CC92EA82852E6A7464>

Java 2 - Lesson01

< F2D92DE82E8914B82CC977088D32E6A7464>

Java (9) 1 Lesson Java System.out.println() 1 Java API 1 Java Java 1

Object MenuComponent MenuBar MenuItem Menu CheckboxMenuItem

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

PowerPoint プレゼンテーション

< F2D82518CC282CC D2E6A7464>

Prog2_9th

Java 2 - Lesson01

......() JButton

<4D F736F F F696E74202D AC C8899E D834F E >

< F2D A839382CC906A2E6A7464>

Prog1_10th

2

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

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

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

Microsoft PowerPoint - OOP.pptx

GEC-Java

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

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

Prog1_12th

PowerPoint プレゼンテーション

2

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;


PowerPoint プレゼンテーション

Javaセキュアコーディングセミナー東京 第3回 入出力(File, Stream)と例外時の動作 演習解説

(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

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

JavaプログラミングⅠ

最初に

< F2D89BA8EE882C E6A7464>

Programming-C-9.key

Prog2_11th

問1

JAVA とテンプレート

Java - Visual Editor

Microsoft PowerPoint - OOP.pptx

解答上の注意 1 解答は 解答 紙の問題番号に対応した解答欄にマークしなさい 2 選択肢は 問ごとに 意されています 問 1の選択肢は 問 2で使 しません 3 選択肢は量が多いため 探しやすさの観点よりグループ分けされています グループ分けに合わせて解答欄が区切られていますが 横 1 列で問題 1

プログラミングA

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

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

Java言語 第1回

Microsoft Word - Java4.DOC

Prog1_11th

応用プログラミング 2004/11/23 データの入出力 データの入出力データをキーボードからコンピュータに入力することや CRT に表示すること, さらにハードディスク (HDD) や MO などに保存されているファイルからデータをコンピュータに読み込むことや ( 逆に ) データをこれらの装置に

JavaプログラミングⅠ

Transcription:

オブジェクト指向プログラミング演習課題 20071128 以下のような GUI 画面を表示するプログラムを完成させなさい 前回演習で作成したプログラムにイベント処理を追加します 注意 : ファイル名が同じものがあるので 課題毎にディレクトリーを分ける等してください 課題 20071128_01 講義資料内で紹介したイベント処理の例 2 を作成し 動作を確認せよ (1) コントロールクラス (main メッソドを含むクラス ) は Kadai20071128_01 とし 以下のようなものとする 課題 20071128_01 Kadai20071128_01.java コントロールクラス public class Kadai20071128_01 { public static void main(string[] args) { TaxCalc frame = new TaxCalc("Tax Calculator"); (2) フレームのクラス名は TaxCalc とし 講義資料に基き作成しなさい ( イベント処理の例 1のイベントリスナーの登録部分を変更する ) (3) イベントリスナーのクラス名は EventHandler とし 講義資料に基き作成しなさい ( 簡易レジスター ) 概略仕様 : 1. フレーム内にはパネルが4つあり レイアウトは GridLayout(4, 1)(4 行 1 列のレイアウト ) とする 2. 一つ目のパネル内には ラベル ( 製品名 と左寄せ表示 ) とテキストフィールド ( サイズは 10 桁 ) があり レイアウトは FlowLayout() とする 3. 二つ目のパネル内には ラベル ( 個数 と左寄せ表示 ) とテキストフィールド ( サイズは 10 桁 ) があり レイアウトは FlowLayout() とする 4. 三つ目のパネル内にはボタンが二つ ( それぞれのラベルを 追加 合計 とする ) あり レイアウトは FlowLayout() とする 5. 四つ目のパネル内には ラベル ( 合計金額 と左寄せ表示 ) とテキストフィールド ( サイズは 10 桁 ) があり レイアウトは FlowLayout() とする ( 以上が前回作成したプログラム ) 6. ボタン 追加 合計 のそれぞれにアクションリスナーを登録する 7. ボタン 追加 に対応したアクションリスナークラス AddListener を作成する このクラスは ボタンが押される度に 製品名 に付随するテキストフィールド内の文字列に対応する製品と 個数 に付随するテキストフィールド内の ( 文字列を整数に変換した ) 数字のペアを ProductCountList クラス型の変数に順次登録してゆく ( 製品名は SeihinA SeihinB SeihinC の3 種類 ) 8. ボタン 合計 に対応したアクションリスナークラス SumListener を作成する このクラスは ProductCountList クラス型の変数に登録されている製品名と個数を順次取り出し PriceList クラスに問い合わせる (getprice メッソドを使用する ) ことによって製品名からその価格を得た後に 価格 個数の総和を計算し その値を 合計金額 に付随するテキストフィールドに書き込む 9.ProductCountList クラスは ArrayList クラスのフィールド ( メンバー変数 ) 等を持つ ArrayList の要素は ProductCount クラスであり ProductCount クラスは String 型フィールド ( メンバー変数 )product と int 型フィールド ( メンバー変数 )count 等を持つ 10.PriceList クラスは ArrayList クラスのフィールド ( メンバー変数 ) 等を持つ ArrayList の要素は ProductPrice クラスであり ProductPrice クラスは String 型フィールド ( メンバー変数 )product と int 型フィールド ( メンバー変数 )price 等を持つ (1) コントロールクラス (main メッソドを含むクラス ) は Kadai20071128_01 とし 以下のようなものとする Kadai20071128_02.java コントロールクラス

public class Kadai20071128_02 { public static void main(string[] args) { MyFrame frame = new MyFrame("Kadai20071128_02"); (2) フレームのクラス名は MyFrame とし 以下のようなものとする MyFrame.java フレーム public class MyFrame { private JFrame frame; private JPanel panel1; private JPanel panel2; private JPanel panel3; private JPanel panel4; private JLabel label1; private JTextField text1; private JLabel label2; private JTextField text2; private JButton button1; private JButton button2; private JLabel label4; private JTextField text4; // private JMenuItem menuitem; 後日の演習で使用する予定 private ProductCountList pcl = new ProductCountList(); MyFrame(String title) { // JFrame インスタンス化 frame = new JFrame(title); // JPanel のインスタンス化 ( 一つ目 ) panel1 = new JPanel(); panel2 = new JPanel(); panel3 = new JPanel(); panel4 = new JPanel(); // コンポーネントのインスタンス化 label1 = new JLabel(" 製品名 ", JLabel.LEFT); text1 = new JTextField(10); label2 = new JLabel(" 個数 ", JLabel.LEFT); text2 = new JTextField(10); button1 = new JButton(" 追加 "); button2 = new JButton(" 合計 "); label4 = new JLabel(" 合計金額 ", JLabel.LEFT); text4 = new JTextField(10); panel1.setlayout(new FlowLayout()); panel1.add(label1); panel1.add(text1); panel2.setlayout(new FlowLayout());

panel2.add(label2); panel2.add(text2); panel3.setlayout(new FlowLayout()); panel3.add(button1); panel3.add(button2); panel4.setlayout(new FlowLayout()); panel4.add(label4); panel4.add(text4); // ActionListener を追加 AddListener al = new AddListener(text1, text2, pcl); button1. 1 (al); SumListener sl = new SumListener(text4, pcl); button2. 1 (sl); // JFrame のコンテントペインを取得 Container con = frame.getcontentpane(); // レイアウトマネージャー (GridLayout を使用 ) con.setlayout(new GridLayout(4, 1)); // パネルの追加 con.add(panel1); con.add(panel2); con.add(panel3); con.add(panel4); // 後日の演習でここにメニュー及びその ActionListener の追加を行う予定 // JFrame のセットアップ frame.setdefaultcloseoperation(jframe.exit_on_close); frame.pack(); frame.setvisible(true); (3) ボタン 追加 に対応したアクションリスナークラスを作成する AddListener.java Add Button に対するイベントリスナー import java.awt.event.*; public class AddListener implements 2 { private JTextField text1; private JTextField text2; private ProductCountList pcl; AddListener(JTextField text1, JTextField text2, ProductCountList pcl) { this.text1 = text1; this.text2 = text2; this.pcl = pcl;

public void 3 (ActionEvent e) { try { pcl.setproductcount(text1.gettext(), Integer.parseInt(text2.getText())); catch( NumberFormatException ex ) { (4) ボタン 合計 に対応したアクションリスナークラスを作成する SumListener.java Sum Button に対するイベントリスナー import java.awt.event.*; public class SumListener implements 2 { private JTextField text; private ProductCountList pcl; SumListener(JTextField text, ProductCountList pcl) { this.text = text; this.pcl = pcl; public void 3 (ActionEvent e) { int totalprice = 0; PriceList pl = new PriceList(); for( int i = 0; i < pcl.size(); i++ ) { ProductCount pc = pcl.getproductcount(i); String seihin = pc.getproduct(); int kosu = pc.getcount(); totalprice += pl.getprice(seihin)*kosu; text.settext(integer.tostring(totalprice)); (5) その他のクラス (4つある) は以下のようになる クラスは完成しているので そのままコピー & ペーストして使用して良い ProductCountList.java 製品 (product) の個数のリスト import java.util.*; public class ProductCountList { private ArrayList<ProductCount> pcl = new ArrayList<ProductCount>(); public int size() { return pcl.size(); public ProductCount getproductcount(int index) {

if( (0 <= index) && (index < pcl.size()) ) { return (ProductCount)pcl.get(index); else { return null; public void setproductcount(string product, int count) { ProductCount pc = new ProductCount(); pc.setproduct(product); pc.setcount(count); pcl.add(pc); ProductCount.java 製品 (product) の個数 public class ProductCount { private String product; private int count; public String getproduct() { return product; public int getcount() { return count; public void setproduct(string product) { this.product = product; public void setcount(int count) { this.count = count; PriceList.java 製品 (product) とその価格 (price) のリスト import java.util.*; public class PriceList { private ArrayList<ProductPrice> productprice = new ArrayList<ProductPrice>(); private String[] productlist = {"SeihinA", "SeihinB", "SeihinC"; private int[] pricelist = {700, 1000, 1260; PriceList() { for( int i = 0; i < 3; i++ ) { ProductPrice pp = new ProductPrice();

pp.setproduct(productlist[i]); pp.setprice(pricelist[i]); productprice.add(pp); public int getprice(string product) { for( int i = 0; i < productprice.size(); i++ ) { ProductPrice pp = (ProductPrice)productPrice.get(i); if( product.equals(pp.getproduct()) ) { return pp.getprice(); return 0; ProductPrice.java 製品 (product) とその価格 (price) public class ProductPrice { private String product; private int price; public String getproduct() { return product; public int getprice() { return price; public void setproduct(string product) { this.product = product; public void setprice(int price) { this.price = price; 課題 20071128_03( 簡易エディター ) 概略仕様 : 1. フレーム内には パネルが1つとスクロールパネルが1つあり レイアウトは BorderLayout() とする パネルを NORTH にスクロールパネルを CENTER に配置する 2. スクロールパネル内には テキストエリアがある スクロールパネルの属性は 縦スクロールバーを常に表示 スクロールパネルのサイズは 500 250 とする 3. パネル内にはボタンが二つ ( それぞれのラベルを 開く 保存 とする ) あり レイアウトは FlowLayout() とする ( 以上が前回作成したプログラム ) 4. ボタン 開く 保存 のそれぞれにアクションリスナーを登録する 5. ボタン 開く に対応したアクションリスナークラス OpenListener を作成する このクラスは JFileChooser クラスを用いてファイルを開き その内容をテキストエリアに書き込む 6. ボタン 保存 に対応したアクションリスナークラス SaveListener を作成する このクラスは JFileChooser クラスを用いてファイルを作

成又は開き テキストエリアの内容をそのファイルに書き込む (1) コントロールクラスは Kadai20071128_03 とし 以下のようなものとする 課題 20071128_03 Kadai20071128_03.java コントロールクラス public class Kadai20071128_03 { public static void main(string[] args) { MyFrame frame = new MyFrame("Kadai20071128_03"); (2) フレームのクラス名は MyFrame とし 以下のようなものとする 課題 20071128_03 MyFrame.java フレーム public class MyFrame extends JFrame { private JFrame frame; private JPanel panel; private JScrollPane scroll; private JButton open; private JButton save; private JTextArea textarea; // private JMenuItem menuitem11; 後日の演習で使用する予定 // private JMenuItem menuitem12; 後日の演習で使用する予定 // private JMenuItem menuitem2; 後日の演習で使用する予定 private JFileChooser chooser = new JFileChooser(); MyFrame(String title) { // JFrame のインスタンス化 frame = new JFrame(title); // コンポーネントの作成 textarea = new JTextArea(); textarea.setwrapstyleword(true); textarea.setlinewrap(true); // スクロールパネルのインスタンス化及びテキストエリアの追加 scroll = new JScrollPane(textArea); scroll.setverticalscrollbarpolicy(jscrollpane.vertical_scrollbar_always); scroll.setpreferredsize(new Dimension(250, 250)); // JPanel のインスタンス化 panel = new JPanel(); // コンポーネントのインスタンス化 open = new JButton(" 開く "); save = new JButton(" 保存 "); // ActionListener を追加 OpenListener ol = new OpenListener(frame, textarea, chooser); open. 1 (ol); SaveListener sl = new SaveListener(frame, textarea, chooser); save. 1 (sl);

panel.setlayout(new FlowLayout()); panel.add(open); panel.add(save); // コンテントペインの取得 Container con = frame.getcontentpane(); // レイアウトマネージャー (BorderLayout を使用 ) con.setlayout(new BorderLayout()); // コンテントペインにパネルを追加 con.add(panel, BorderLayout.NORTH); con.add(scroll, BorderLayout.CENTER); // 後日の演習でここにメニュー及びその ActionListener の追加を行う予定 // JFrame のセットアップ frame.setdefaultcloseoperation(jframe.exit_on_close); frame.pack(); frame.setvisible(true); (3) ボタン 開く に対応したアクションリスナークラスを作成する 課題 20071128_03 OpenListener.java Open Button に対するイベントリスナー import java.awt.event.*; import javax.swing.filechooser.*; import java.io.*; public class OpenListener implements 2 { private JFrame frame; private JTextArea textarea; private JFileChooser chooser; OpenListener(JFrame frame, JTextArea textarea, JFileChooser chooser) { this.frame = frame; this.textarea = textarea; this.chooser = chooser; public void 3 (ActionEvent e) { int returnvalue = chooser.showopendialog(frame); // [Open File] 用 JFileChooser の可視化 // 戻り値では JFileChooser が閉じられたのが // OK ボタンによるのか Cancel ボタンによるのかを識別 try { File file = chooser.getselectedfile(); // 選択されたファイルの抽象パスを取得 FileReader fr = new FileReader(file); // 文字ファイル読み込み簡易ストリーム textarea.read(fr, null); // テキストエリアに文字列セット frame.settitle(file.getabsolutepath()); // フレームのタイトル変更 fr.close(); // 読み込みバッファのクローズ catch( Exception ex ) { ex.printstacktrace();

(4) ボタン 保存 に対応したアクションリスナークラスを作成する 課題 20071128_03 SaveListener.java Save Button に対するイベントリスナー import java.awt.event.*; import javax.swing.filechooser.*; import java.io.*; public class SaveListener implements 2 { private JFrame frame; private JTextArea textarea; private JFileChooser chooser; SaveListener(JFrame frame, JTextArea textarea, JFileChooser chooser) { this.frame = frame; this.textarea = textarea; this.chooser = chooser; public void 3 (ActionEvent e) { int returnvalue = chooser.showsavedialog(frame); // [Save File] 用 JFileChooser の可視化 // 戻り値では JFileChooser が閉じられたのが // OK ボタンによるのか Cancel ボタンによるのかを識別 try{ if( returnvalue == JFileChooser.APPROVE_OPTION ) { // OK ボタンで JFileChooser が閉じられた場合 FileWriter fw = new FileWriter(chooser.getSelectedFile()); // 選択されたファイルの抽象パスを取得 fw.write(textarea.gettext()); // テキストエリアの文字列をファイルに書き込み fw.close(); // 書き込みバッファのクローズ catch( Exception ex ) { ex.printstacktrace();