• 検索結果がありません。

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

N/A
N/A
Protected

Academic year: 2021

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

Copied!
16
0
0

読み込み中.... (全文を見る)

全文

(1)

オブジェクト指向プログラミング演習 課題 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 コントロールクラス */ import java.awt.*; import javax.swing.*;

public class HelloSwing extends JFrame { // 部品はプライベートで宣言しておく private JFrame frame;

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);

(2)

// 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);

(3)

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 java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.filechooser.*; import java.io.*;

public class OpenListener implements ActionListener { 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 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_01 SaveListener.java 「保存」に対するイベントリスナー */ import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.filechooser.*; import java.io.*;

public class SaveListener implements ActionListener { 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 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 「終了」に対するイベントリスナー */ import java.awt.*; import javax.swing.*; import java.awt.event.*;

public class ExitListener implements ActionListener { public void actionPerformed(ActionEvent e) { System.exit(0);

} }

(5)

/** 課題 20071205_01 MouseEventHandler.java マウスイベントに対するイベントリスナー */ import java.awt.*; import javax.swing.*; import java.awt.event.*;

public class MouseEventHandler implements MouseListener { private JFrame frame;

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”をホームページからダウンロードする。

■課題 20071205_02(簡易レジスター)

概略仕様: 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 メッソドを使用する)ことによって製品名からその価格を得

(6)

た後に、価格×個数の総和を計算し、その値を“合計金額”に付随するテキストフィールドに書き込む。

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 とし、以下のようなものとする。 /** 課題 20071205_02 Kadai20071205_02.java コントロールクラス */

public class Kadai20071205_02 {

public static void main(String[] args) {

MyFrame frame = new MyFrame("Kadai20071205_02");

} } (2)フレームのクラス名は MyFrame とし、以下のようなものとする。 /** 課題 20071205_02 MyFrame.java フレーム */ import java.awt.*; import javax.swing.*;

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();

(7)

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);

// レイアウトマネージャー(FlowLayout を使用) panel1.setLayout(new FlowLayout()); // コンポーネントの追加 panel1.add(label1); panel1.add(text1); // レイアウトマネージャー(FlowLayout を使用) panel2.setLayout(new FlowLayout()); // コンポーネントの追加 panel2.add(label2); panel2.add(text2); // レイアウトマネージャー(FlowLayout を使用) panel3.setLayout(new FlowLayout()); // コンポーネントの追加 panel3.add(button1); panel3.add(button2); // レイアウトマネージャー(FlowLayout を使用) 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);

(8)

menubar. 【 4 】(menu); // JMenuBar の追加 frame. 【 5 】(menubar); // JFrame のセットアップ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } } (3)ボタン“追加”に対応したアクションリスナークラスを作成する。(前回と全く同じもの) /** 課題 20071205_02 AddListener.java Add Button に対するイベントリスナー */ import java.awt.*; import javax.swing.*; import java.awt.event.*;

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)ボタン“合計”に対応したアクションリスナークラスを作成する。(前回と全く同じもの) /** 課題 20071205_02 SumListener.java Sum Button に対するイベントリスナー */ import java.awt.*; import javax.swing.*; import java.awt.event.*;

public class SumListener implements ActionListener {

private JTextField text;

private ProductCountList pcl;

SumListener(JTextField text, ProductCountList pcl) {

this.text = text;

(9)

}

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)メニューアイテム“バージョン”に対応したアクションリスナークラスを作成する。クラスは完成しているので、そのままコピー&ペー ストして使用して良い。 /** 課題 20071205_02 MenuListener.java MenuItem に対するイベントリスナー */ import java.awt.*; import javax.swing.*; import java.awt.event.*;

public class MenuListener implements ActionListener {

private JFrame frame;

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);

// レイアウトマネージャー(FlowLayout を使用) panel.setLayout(new FlowLayout());

// コンポーネントの追加 panel.add(label);

// JDialog のコンテントペインを取得

Container con = dialog.getContentPane();

// レイアウトマネージャー(FlowLayout を使用) con.setLayout(new FlowLayout()); // パネルの追加 con.add(panel); // JDialog のセットアップ dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); dialog.pack(); dialog.setVisible(true);

(10)

} } (6)その他のクラス(4つある)は以下のようになる。(前回と全く同じもの) /** 課題 20071205_02 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); } } /** 課題 20071205_02 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;

}

(11)

this.count = count; } } /** 課題 20071205_02 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; } } /** 課題 20071205_02 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;

(12)

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 フレーム */ import java.awt.*; import javax.swing.*;

public class MyFrame extends JFrame {

private JFrame frame;

private JPanel panel;

private JScrollPane scroll;

private JButton open;

private JButton save;

(13)

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); // レイアウトマネージャー(FlowLayout を使用) 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);

(14)

// 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 java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.filechooser.*; import java.io.*;

public class OpenListener implements ActionListener {

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

(15)

SaveListener.java Save Button に対するイベントリスナー */ import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.filechooser.*; import java.io.*;

public class SaveListener implements ActionListener {

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 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 に対するイベントリスナー */ import java.awt.*; import javax.swing.*; import java.awt.event.*;

public class MenuListener implements ActionListener {

private JFrame frame;

private JMenuItem menuitem;

MenuListener(JFrame frame, JMenuItem menuitem) {

this.frame = frame;

this.menuitem = menuitem;

}

(16)

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);

// レイアウトマネージャー(FlowLayout を使用) panel.setLayout(new FlowLayout());

// コンポーネントの追加 panel.add(label);

// JDialog のコンテントペインを取得

Container con = dialog.getContentPane();

// レイアウトマネージャー(FlowLayout を使用) con.setLayout(new FlowLayout()); // パネルの追加 con.add(panel); // JDialog のセットアップ dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); dialog.pack(); dialog.setVisible(true); } }

参照

関連したドキュメント

In the previous section, we revisited the problem of the American put close to expiry and used an asymptotic expansion of the Black-Scholes-Merton PDE to find expressions for

図 3.1 に RX63N に搭載されている RSPI と簡易 SPI の仕様差から、推奨する SPI

2.シニア層に対する活躍支援 (3) 目標と課題認識 ○ 戦力として期待する一方で、さまざまな課題も・・・

「1 建設分野の課題と BIM/CIM」では、建設分野を取り巻く課題や BIM/CIM を行う理由等 の社会的背景や社会的要求を学習する。「2

発行日 2005.10.1 改訂番号 - 大成基礎設計株式会社

1.共同配送 5.館内配送の 一元化 11.その他.  20余の高層ビルへの貨物を当

 Calculation of the Renewable Energy Surcharge unit price and the Solar Surcharge unit price The &#34;Renewable Energy Surcharge unit price&#34; (per kWh) for the said fiscal

⑤  日常生活・社会生活を習得するための社会参加適応訓練 4.