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

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

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

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

Java言語 第1回

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

ガイダンス

ガイダンス

ガイダンス

Microsoft PowerPoint - swing2.ppt

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

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

2

PowerPoint Presentation

Java言語 第1回

Microsoft PowerPoint - swing3.ppt

Java 2 - Lesson01

PowerPoint Presentation

ガイダンス

Java 2 - Lesson01

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

text_12.dvi

ガイダンス

GUIプログラムⅤ

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

Microsoft PowerPoint - prog13.ppt

Microsoft PowerPoint - prog13.ppt

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

< F2D B838A835882CC8CF68EAE2E6A7464>

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

< F2D834F838C A815B A CC>

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

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

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

Object MenuComponent MenuBar MenuItem Menu CheckboxMenuItem

Prog1_12th

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

text_13.dvi

<4D F736F F F696E74202D AC C8899E D834F E >

< F2D B825082CC96E291E82E6A7464>

GUIプログラムⅣ

2

Prog2_10th

GUIプログラムⅡ

< F2D E E6A7464>

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

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

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

......() JButton

Prog2_11th

問1

Microsoft PowerPoint - prog12.ppt

Java 2 - Lesson01

Microsoft PowerPoint - OOP.pptx

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

Java 2 - Lesson01

Prog1_12th

< F2D82B682E182F182AF82F12E6A7464>

Microsoft PowerPoint - prog09.ppt

Microsoft PowerPoint - prog09.ppt

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

< F2D82518E9F8AD CC95BD8D7388DA93AE2E6A7464>

< F2D A838B838D96402E6A7464>

PowerPoint プレゼンテーション

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

< F2D8EA CE909482CC92EA82852E6A7464>

< F2D825282CC947B909482CC A815B83682E6A>

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

Java - Visual Editor

< F2D92DE82E8914B82CC977088D32E6A7464>

Prog2_15th

< F2D82518E9F8AD CC834F CC8CFC82AB82C68D4C>

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

< F2D F B834E2E6A7464>

r14.dvi

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

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

Prog2_9th

PowerPoint プレゼンテーション

GEC-Java

PowerPoint プレゼンテーション

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

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

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

Prog1_10th

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

< F2D82518CC282CC D2E6A7464>

< F2D A839382CC906A2E6A7464>

Graphical User Interface 描画する

JavaプログラミングⅠ

Java言語 第1回

2008 e-learning T050050

2

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

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

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;

最初に

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

TestDesign for Web

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

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

Transcription:

オブジェクト指向プログラミング演習課題 20071205 以下のような GUI 画面を表示するプログラムを完成させなさい 前回演習で作成したプログラムにメニューを追加します 注意 : ファイル名が同じものがあるので 課題毎にディレクトリーを分ける等してください 課題 20071205_01 講義資料内で紹介したメニュー処理の例を完成し 動作を確認せよ (1) コントロールクラス (main メッソドを含むクラス ) は Kadai20071205_01 とし 以下のようなものとする 課題 20071205_01 Kadai20071205_01.java コントロールクラス public class Kadai20071205_01 { public static void main(string[] args) { HelloSwing frame = new HelloSwing("Hello Swing"); (2) フレームのクラス名は HelloSwing とし 講義資料に基き作成しなさい ( イベントリスナーの登録部分を追加する ) 課題 20071205_01 HelloSwing.java コントロールクラス public class HelloSwing extends JFrame { // 部品はプライベートで宣言しておく private JPanel panel; private JScrollPane scroll; private JLabel label; private JTextArea textarea; private JFileChooser chooser = new JFileChooser(); // コンストラクター ( 別にメッソドを作成しても良い ) HelloSwing(String title) { // JFrameのインスタンス化 frame = new JFrame(title); // JTextAreaのインスタンス化 textarea = new JTextArea(" テキストが入力できます ", 10, 30); // JScrollPane のインスタンス化 scroll = new JScrollPane(textArea); scroll.setverticalscrollbarpolicy(jscrollpane.vertical_scrollbar_always); scroll.setpreferredsize(new Dimension(500, 250)); // JPanel のインスタンス化 panel = new JPanel(); // JLabel のインスタンス化 label = new JLabel(" 右クリックでポップアップメニュー "); // コンポーネントの追加 panel.setlayout(new FlowLayout()); panel.add(label);

// JFrameのコンテントペインの取得 Container con = frame.getcontentpane(); // コンテントペインに JPanel, JScrollPane を配置 con.setlayout(new BorderLayout()); con.add(scroll, BorderLayout.CENTER); con.add(panel, BorderLayout.SOUTH); // JMenuBar, JtoolBar のインスタンス化 JMenuBar menubar = new JMenuBar(); JToolBar toolbar = new JToolBar(); toolbar.setfloatable(false); // JMenu, JPopupMenu のインスタンス化 JMenu file = new JMenu(" ファイル "); JMenu view = new JMenu(" 表示 "); JPopupMenu popup = new JPopupMenu(); // JMenuItemのインスタンス化 JMenuItem open = new JMenuItem(" 開く "); JMenuItem save = new JMenuItem(" 保存 "); JMenuItem exit = new JMenuItem(" 終了 "); JCheckBoxMenuItem tool = new JCheckBoxMenuItem(" ツールバー ", true); JMenu size = new JMenu(" フォントサイズ "); JMenuItem large = new JMenuItem(" 大きく "); JMenuItem small = new JMenuItem(" 小さく "); JMenuItem openpopup = new JMenuItem(" 開く "); JMenuItem savepopup = new JMenuItem(" 保存 "); // JTooBar 用 JButton のインスタンス化 JButton openbutton = new JButton(new ImageIcon("open.png")); JButton savebutton = new JButton(new ImageIcon("save.png")); // イベントリスナーを登録 講義資料に基き イベントリスナーの登録を行う // 他のイベントリスナー (" ツールバー ", " 大きく ", " 小さく ") は // 省略している // JMenuItemを追加 file.add(open); file.add(save); file.addseparator(); // セパレーター file.add(exit); view.add(tool); size.add(large); size.add(small); view.add(size); // JMenu に JMenu を追加することも可能 popup.add(openpopup); popup.add(savepopup); // JMenu, JButton を配置 menubar.add(file); menubar.add(view);

toolbar.add(openbutton); toolbar.add(savebutton); // JMenuBar, JToolBar をフレームに追加 // JMenuBarは setjmenubar() メッソドを使って frame に // JToolBarは add() メッソドを使ってコンテントペインに // それぞれ追加する frame.setjmenubar(menubar); con.add(toolbar, BorderLayout.NORTH); // フレームのセットアップ frame.setdefaultcloseoperation(jframe.exit_on_close); frame.pack(); frame.setvisible(true); (3) イベントリスナーの4つのクラスを以下のように作成する クラスは完成しているので そのままコピー & ペーストして使用して良い 課題 20071205_01 OpenListener.java 開く に対するイベントリスナー import javax.swing.filechooser.*; import java.io.*; public class OpenListener implements ActionListener { private JTextArea textarea; private JFileChooser chooser; OpenListener(JFrame frame, JTextArea textarea, JFileChooser chooser) { this.frame = frame; this.textarea = textarea; this.chooser = chooser; public void actionperformed(actionevent e) { int returnvalue = chooser.showopendialog(frame); // [Open File] 用 JFileChooser の可視化 // 戻り値では JFileChooser が閉じられたのが // OKボタンによるのか Cancel ボタンによるのかを識別 try { if( returnvalue == JFileChooser.APPROVE_OPTION ) { // OK ボタンで JFileChooser が閉じられた場合 File file = chooser.getselectedfile(); // 選択されたファイルの抽象パスを取得 FileReader fr = new FileReader(file); // 文字ファイル読み込み簡易ストリーム textarea.read(fr, null); // テキストエリアに文字列セット frame.settitle(file.getabsolutepath()); // フレームのタイトル変更 fr.close(); // 読み込みバッファのクローズ catch( Exception ex ) { ex.printstacktrace();

課題 20071205_01 SaveListener.java 保存 に対するイベントリスナー import javax.swing.filechooser.*; import java.io.*; public class SaveListener implements ActionListener { private JTextArea textarea; private JFileChooser chooser; SaveListener(JFrame frame, JTextArea textarea, JFileChooser chooser) { this.frame = frame; this.textarea = textarea; this.chooser = chooser; public void actionperformed(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(); 課題 20071205_01 ExitListener.java 終了 に対するイベントリスナー public class ExitListener implements ActionListener { public void actionperformed(actionevent e) { System.exit(0);

課題 20071205_01 MouseEventHandler.java マウスイベントに対するイベントリスナー public class MouseEventHandler implements MouseListener { private JPopupMenu popup; MouseEventHandler(JFrame frame, JPopupMenu popup) { this.frame = frame; this.popup = popup; public void mousepressed(mouseevent e) { if( e.ispopuptrigger() ) { popup.show(frame, e.getx(), e.gety()); public void mousereleased(mouseevent e) { if( e.ispopuptrigger() ) { popup.show(frame, e.getx(), e.gety()); public void mouseclicked(mouseevent e) { public void mouseentered(mouseevent e) { public void mouseexited(mouseevent e) { (4) 画像 open.png save.png をホームページからダウンロードする ( 簡易レジスター ) 概略仕様 : 1. フレーム内にはパネルが4つあり レイアウトは GridLayout(4, 1)(4 行 1 列のレイアウト ) とする 2. 一つ目のパネル内には ラベル ( 製品名 と左寄せ表示 ) とテキストフィールド ( サイズは 10 桁 ) があり レイアウトは FlowLayout() とする 3. 二つ目のパネル内には ラベル ( 個数 と左寄せ表示 ) とテキストフィールド ( サイズは 10 桁 ) があり レイアウトは FlowLayout() とする 4. 三つ目のパネル内にはボタンが二つ ( それぞれのラベルを 追加 合計 とする ) あり レイアウトは FlowLayout() とする 5. 四つ目のパネル内には ラベル ( 合計金額 と左寄せ表示 ) とテキストフィールド ( サイズは 10 桁 ) があり レイアウトは FlowLayout() とする 6. ボタン 追加 合計 のそれぞれにアクションリスナーを登録する 7. ボタン 追加 に対応したアクションリスナークラス AddListener を作成する このクラスは ボタンが押される度に 製品名 に付随するテキストフィールド内の文字列に対応する製品と 個数 に付随するテキストフィールド内の ( 文字列を整数に変換した ) 数字のペアを ProductCountList クラス型の変数に順次登録してゆく 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 等を持つ ( 以上が前回作成したプログラム ) 11.MyFrame クラスにメニューを追加する メニューは ヘルプ とし メニューアイテムは バージョン とする 12. メニューアイテム バージョン には アクションリスナーを登録する 13. メニューアイテム バージョン に対応したアクションリスナー Menulistener を作成する このクラスは Jdialog クラスのウィンドウを表示し 1つのパネルを持ち そのパネル内には一つのラベル ( Version 1.0 (released on December 5, 2007) と左寄せ表示 ) を持つ (1) コントロールクラス (main メッソドを含むクラス ) は Kadai20071205_02 とし 以下のようなものとする Kadai20071205_02.java コントロールクラス public class Kadai20071205_02 { public static void main(string[] args) { MyFrame frame = new MyFrame("Kadai20071205_02"); (2) フレームのクラス名は MyFrame とし 以下のようなものとする MyFrame.java フレーム public class MyFrame { 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.addactionlistener(al); SumListener sl = new SumListener(text4, pcl); button2.addactionlistener(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); // JMenuBar のインスタンス化 1 menubar = new 1 (); // JMenu のインスタンス化 2 menu = new 2 (" ヘルプ "); // JMenuItem のインスタンス化 menuitem = new 3 (" バージョン "); // ActionListener を追加 MenuListener ml = new MenuListener(frame, menuitem); menuitem.addactionlistener(ml); // JMenuItem の追加 menu. 4 (menuitem); // JMenu の追加

menubar. 4 (menu); // JMenuBar の追加 frame. 5 (menubar); // JFrame のセットアップ frame.setdefaultcloseoperation(jframe.exit_on_close); frame.pack(); frame.setvisible(true); (3) ボタン 追加 に対応したアクションリスナークラスを作成する ( 前回と全く同じもの ) AddListener.java Add Button に対するイベントリスナー public class AddListener implements ActionListener { 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 actionperformed(actionevent e) { try { pcl.setproductcount(text1.gettext(), Integer.parseInt(text2.getText())); catch( NumberFormatException ex ) { (4) ボタン 合計 に対応したアクションリスナークラスを作成する ( 前回と全く同じもの ) SumListener.java Sum Button に対するイベントリスナー public class SumListener implements ActionListener { private JTextField text; private ProductCountList pcl; SumListener(JTextField text, ProductCountList pcl) { this.text = text; this.pcl = pcl;

public void actionperformed(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) メニューアイテム バージョン に対応したアクションリスナークラスを作成する クラスは完成しているので そのままコピー & ペーストして使用して良い MenuListener.java MenuItem に対するイベントリスナー public class MenuListener implements ActionListener { private JMenuItem menuitem; MenuListener(JFrame frame, JMenuItem menuitem) { this.frame = frame; this.menuitem = menuitem; public void actionperformed(actionevent e) { // JDialog インスタンス化 JDialog dialog = new JDialog(frame, " バージョン "); // JPanel のインスタンス化 JPanel panel = new JPanel(); // コンポーネントのインスタンス化 JLabel label = new JLabel("Version 1.0 (released on December 5, 2007)", JLabel.LEFT); panel.setlayout(new FlowLayout()); // コンポーネントの追加 panel.add(label); // JDialog のコンテントペインを取得 Container con = dialog.getcontentpane(); con.setlayout(new FlowLayout()); // パネルの追加 con.add(panel); // JDialog のセットアップ dialog.setdefaultcloseoperation(jdialog.dispose_on_close); dialog.pack(); dialog.setvisible(true);

(6) その他のクラス (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; 課題 20071205_03( 簡易エディター ) 概略仕様 : 1. フレーム内には パネルが1つとスクロールパネルが1つあり レイアウトは BorderLayout() とする パネルを NORTH にスクロールパネルを CENTER に配置する 2. スクロールパネル内には テキストエリアがある スクロールパネルの属性は 縦スクロールバーを常に表示 スクロールパネルのサイズは 500 250 とする 3. パネル内にはボタンが二つ ( それぞれのラベルを 開く 保存 とする ) あり レイアウトは FlowLayout() とする 4. ボタン 開く 保存 のそれぞれにアクションリスナーを登録する 5. ボタン 開く に対応したアクションリスナークラス OpenListener を作成する このクラスは JFileChooser クラスを用いてファイルを開き その内容をテキストエリアに書き込む 6. ボタン 保存 に対応したアクションリスナークラス SaveListener を作成する このクラスは JFileChooser クラスを用いてファイルを作成又は開き テキストエリアの内容をそのファイルに書き込む ( 以上が前回作成したプログラム ) 7.MyFrame クラスにメニューを追加する メニューは ファイル ヘルプ とし ファイル のメニューアイテムは 開く 保存 とし ヘルプ のメニューアイテムは バージョン とする 8. メニューアイテム 開く 保存 バージョン のそれぞれにアクションリスナーを登録する 9. メニューアイテム 開く に対応したアクションリスナーは ボタン 開く に対応したアクションリスナー OpenListener とする 10. メニューアイテム 保存 に対応したアクションリスナーは ボタン 保存 に対応したアクションリスナー SaveListener とする 11. メニューアイテム バージョン に対応したアクションリスナー Menulistener を作成する このクラスは Jdialog クラスのウィンドウを表示し 1つのパネルを持ち そのパネル内には一つのラベル ( Version 1.0 (released on December 5, 2007) と左寄せ表示 ) を持つ (1) コントロールクラスは Kadai20071205_03 とし 以下のようなものとする 課題 20071205_03 Kadai20071205_03.java コントロールクラス public class Kadai20071205_03 { public static void main(string[] args) { MyFrame frame = new MyFrame("Kadai20071205_03"); (2) フレームのクラス名は MyFrame とし 以下のようなものとする 課題 20071205_03 MyFrame.java フレーム public class MyFrame extends JFrame { 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.addactionlistener(ol); SaveListener sl = new SaveListener(frame, textarea, chooser); save.addactionlistener(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); // JMenuBar のインスタンス化 1 menubar = new 1 (); // JMenu のインスタンス化 2 menu1 = new 2 (" ファイル "); 2 menu2 = new 2 (" ヘルプ "); // JMenuItem のインスタンス化 menuitem11 = new 3 (" 開く "); menuitem12 = new 3 (" 保存 "); menuitem2 = new 3 (" バージョン "); // ActionListener を追加 menuitem11.addactionlistener(ol); menuitem12.addactionlistener(sl); MenuListener ml = new MenuListener(frame, menuitem2); menuitem2.addactionlistener(ml); // JMenuItem の追加 menu1. 4 (menuitem11); menu1. 4 (menuitem12); menu2. 4 (menuitem2);

// JMenu の追加 menubar. 4 (menu1); menubar. 4 menu2); // JMenuBar の追加 frame. 5 (menubar); // JFrame のセットアップ frame.setdefaultcloseoperation(jframe.exit_on_close); frame.pack(); frame.setvisible(true); (3) ボタン 開く に対応したアクションリスナークラスを作成する ( 前回と全く同じもの ) 課題 20071205_03 OpenListener.java Open Button に対するイベントリスナー import javax.swing.filechooser.*; import java.io.*; public class OpenListener implements ActionListener { private JTextArea textarea; private JFileChooser chooser; OpenListener(JFrame frame, JTextArea textarea, JFileChooser chooser) { this.frame = frame; this.textarea = textarea; this.chooser = chooser; public void actionperformed(actionevent e) { int returnvalue = chooser.showopendialog(frame); // [Open File] 用 JFileChooser の可視化 // 戻り値では JFileChooser が閉じられたのが // OK ボタンによるのか Cancel ボタンによるのかを識別 try { if( returnvalue == JFileChooser.APPROVE_OPTION ) { // OK ボタンで JFileChooser が閉じられた場合 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) ボタン 保存 に対応したアクションリスナークラスを作成する ( 前回と全く同じもの ) 課題 20071205_03

SaveListener.java Save Button に対するイベントリスナー import javax.swing.filechooser.*; import java.io.*; public class SaveListener implements ActionListener { private JTextArea textarea; private JFileChooser chooser; SaveListener(JFrame frame, JTextArea textarea, JFileChooser chooser) { this.frame = frame; this.textarea = textarea; this.chooser = chooser; public void actionperformed(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(); (5) メニューアイテム バージョン に対応したアクションリスナークラスを作成する クラスは完成しているので そのままコピー & ペーストして使用して良い 課題 20071205_03 MenuListener.java MenuItem に対するイベントリスナー public class MenuListener implements ActionListener { private JMenuItem menuitem; MenuListener(JFrame frame, JMenuItem menuitem) { this.frame = frame; this.menuitem = menuitem;

public void actionperformed(actionevent e) { // JDialog インスタンス化 JDialog dialog = new JDialog(frame, " バージョン "); // JPanel のインスタンス化 JPanel panel = new JPanel(); // コンポーネントのインスタンス化 JLabel label = new JLabel("Version 1.0 (released on December 5, 2007)", JLabel.LEFT); panel.setlayout(new FlowLayout()); // コンポーネントの追加 panel.add(label); // JDialog のコンテントペインを取得 Container con = dialog.getcontentpane(); con.setlayout(new FlowLayout()); // パネルの追加 con.add(panel); // JDialog のセットアップ dialog.setdefaultcloseoperation(jdialog.dispose_on_close); dialog.pack(); dialog.setvisible(true);