解答例 - 実習課題1 - 1.コレクション
(実習課題1)
以下のプログラムを作成しなさい。
- ウィンドウに含まれるコンポーネントは何らかのテキストが書かれたボタン5つと、「表示」「初期化」と書かれたボタン2つ。
- 5つのボタンを押すと、ボタンにかかれたテキストが「Vector」クラスに押された順に記憶される。
- 「表示」ボタンを押すと、コンソールに記憶されたテキストを順に表示する。
- 「初期化」ボタンを押すと、記憶されたテキストを全て消去する。
解答例
package com.techscore.utility.chapter1.exercise1; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Vector; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; /** * VectorExample.java * TECHSCORE Java ユーティリティ1章 実習課題1 * * Copyright (c) 2004 Four-Dimensional Data, Inc. */ public class VectorExample extends JFrame implements ActionListener { private JButton continent[] = { new JButton("Euracia"), new JButton("North America"), new JButton("Africa"), new JButton("Australia"), new JButton("South America")}; private JButton display; private JButton initialize; private Vector vector = new Vector(); public VectorExample() { super("Vector example"); setDefaultCloseOperation(EXIT_ON_CLOSE); //記憶させるテキストを示すボタンを5つ作成 Color backColor[] = { Color.green, Color.blue, Color.black, Color.yellow, Color.red }; Color foreColor[] = { Color.black, Color.white, Color.white, Color.black, Color.white }; Dimension size = new Dimension(150, 50); for (int i = 0; i < continent.length; i++) { continent[i].setBackground(backColor[i]); continent[i].setForeground(foreColor[i]); continent[i].setMinimumSize(size); continent[i].setPreferredSize(size); continent[i].setMaximumSize(size); continent[i].addActionListener(this); } //ボタンを配置 Box topBox = new Box(BoxLayout.X_AXIS); getContentPane().add(topBox, BorderLayout.NORTH); topBox.add(Box.createHorizontalStrut(80)); topBox.add(continent[0]); topBox.add(Box.createHorizontalGlue()); topBox.add(continent[1]); topBox.add(Box.createHorizontalStrut(80)); Box centerBox = new Box(BoxLayout.X_AXIS); getContentPane().add(centerBox, BorderLayout.CENTER); centerBox.add(Box.createHorizontalStrut(5)); centerBox.add(continent[2]); centerBox.add(Box.createHorizontalGlue()); centerBox.add(continent[3]); centerBox.add(Box.createHorizontalGlue()); centerBox.add(continent[4]); centerBox.add(Box.createHorizontalStrut(5)); //操作を行うボタンを2つ作成 display = new JButton("表示"); display.addActionListener(this); initialize = new JButton("初期化"); initialize.addActionListener(this); //操作を行うボタンを配置 Box bottomBox = new Box(BoxLayout.X_AXIS); getContentPane().add(bottomBox, BorderLayout.SOUTH); bottomBox.add(Box.createHorizontalStrut(60)); bottomBox.add(display); bottomBox.add(Box.createHorizontalGlue()); bottomBox.add(initialize); bottomBox.add(Box.createHorizontalStrut(60)); pack(); } public void actionPerformed(ActionEvent e) { //表示ボタンが押されたら、記憶されたテキストをコンソールに表示する if (e.getSource().equals(display)) { for (int i = 0; i < vector.size(); i++) { JButton button = (JButton)vector.get(i); System.out.println(button.getText()); } } //初期化ボタンが押されたら、記憶されたテキストを全て消去する else if (e.getSource().equals(initialize)) { vector.clear(); } //5つのボタンを押すと、ボタンにかかれたテキストが //「Vector」クラスに押された順に記憶される。 else { for (int i = 0; i < continent.length; i++) { if (e.getSource().equals(continent[i])) { vector.add(continent[i]); break; } } } } public static void main(String args[]) { new VectorExample().setVisible(true); } }