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

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

N/A
N/A
Protected

Academic year: 2021

シェア "public class MyFrame { private JPanel panel1; private JPanel panel2; private JPanel panel3; private JPanel panel4; private JLabel label1; private JTex"

Copied!
11
0
0

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

全文

(1)

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

20061206

以下のようなGUI 画面を表示するプログラムを完成させなさい。 前回演習で作成したプログラムにイベント処理を追加します。 注意:ファイル名が同じものがあるので、課題毎にディレクトリーを分ける等してください。

■課題

20061206_01(簡易レジスター)

概略仕様: 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 6, 2006)”と左寄せ表示)を持つ。

(1)コントロールクラス(main メッソドを含むクラス)は、Kadai20061206_01 とし、以下のようなものとする。 /** 課題20061206_01 Kadai20061206_01.java コントロールクラス */

public class Kadai20061206_01 {

public static void main(String[] args) {

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

(2)

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

// レイアウトマネージャー(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を追加

(3)

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)ボタン“追加”に対応したアクションリスナークラスを作成する。 /** 課題20061206_01 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; }

(4)

try { pcl.setProductCount(text1.getText(), Integer.parseInt(text2.getText())); } catch( NumberFormatException ex ) { } } } (4)ボタン“合計”に対応したアクションリスナークラスを作成する。 /** 課題20061206_01 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;

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)メニューアイテム“バージョン”に対応したアクションリスナークラスを作成する。 /** 課題20061206_01 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;

(5)

}

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 6, 2006)", 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つある)は以下のようになる。 /** 課題20061206_01 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);

} }

(6)

/**

課題20061206_01 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; } } /** 課題20061206_01 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;

(7)

} } /** 課題20061206_01 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; } }

■課題

20061206_02(簡易エディター)

概略仕様: 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 6, 2006)”と左寄せ表示)を持つ。

(1)コントロールクラスは、Kadai20061206_02 とし、以下のようなものとする。

/**

課題20061206_02

Kadai20061206_02.java

(8)

*/

public class Kadai20061206_02 {

public static void main(String[] args) {

MyFrame frame = new MyFrame("Kadai20061206_02"); } } (2)フレームのクラス名はMyFrame とし、以下のようなものとする。 /** 課題20061206_02 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 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); // レイアウトマネージャー(FlowLayoutを使用) panel.setLayout(new FlowLayout()); // コンポーネントの追加 panel.add(open); panel.add(save); // コンテントペインの取得

(9)

// レイアウトマネージャー(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)ボタン“開く”に対応したアクションリスナークラスを作成する。 /** 課題20061206_02 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;

(10)

}

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)ボタン“保存”に対応したアクションリスナークラスを作成する。 /** 課題20061206_02 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(); }

(11)

} } (5)メニューアイテム“バージョン”に対応したアクションリスナークラスを作成する。 /** 課題20061206_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 6, 2006)", 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); } }

参照

関連したドキュメント

Using Virtual Tenant Network (VTN) function, four private networks were prepared on single physical network with OpenFlow switch.. Relocation of computer does not

お客様は、各ASLロケーションにおいて、マスター・インストール・メデ ィア及びApproved Volume License

テストが成功しなかった場合、ダイアログボックスが表示され、 Alienware Command Center の推奨設定を確認するように求め

LOBBY LOUNGE ロビーラウンジ BEACH SIDE レストラン ビーチサイド ADAN 阿檀.

回転に対応したアプリを表示中に本機の向きを変えると、 が表 示されます。 をタップすると、縦画面/横画面に切り替わりま

Toyotsu Rare Earths India Private Limited、Toyota Tsusho Gas E&amp;P Trefoil Pty Ltd、. Toyota Tsusho

けいさん たす ひく かける わる せいすう しょうすう ぶんすう ながさ めんせき たいせき

QRコード読込画面 が表示されたら、表 示された画面を選択 してウインドウをアク ティブな状態にした 上で、QRコードリー