オブジェクト指向プログラミング演習 課題 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);
// 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 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(); } } }
/** 課題 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);
} }
/** 課題 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 メッソドを使用する)ことによって製品名からその価格を得た後に、価格×個数の総和を計算し、その値を“合計金額”に付随するテキストフィールドに書き込む。
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();
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);
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;
}
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);
} } (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;
}
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;
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;
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);
// 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
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;
}
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); } }