解答例 - 実習課題1 - 11.ダイアログ
(実習課題1)
以下のプログラムを作成しなさい。
- ウィンドウに表示されるコンポーネントはリストと「追加」メニュー
- リストには10以上の都市の名前がリストアップされている事。
- 「追加」メニューを選択すると、追加内容を入力するためのモーダル・ダイアログを表示する。
- 入力後に、ダイアログの「追加」ボタンを押すと、リストにその内容が追加されるようにする事。
解答例
/**
* DialogFrame.java
* TECHSCORE Javaユーザインタフェース11章 実習課題1
*
* Copyright (c) 2004 Four-Dimensional Data, Inc.
*/
package com.techscore.ui.chapter11.exercise1;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
public class DialogFrame extends JFrame implements ActionListener {
private JMenuItem addMenuItem;
private JList list;
private DefaultListModel listModel;
public DialogFrame() {
super("DialogFrame");
setDefaultCloseOperation(EXIT_ON_CLOSE);
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu addMenu = new JMenu("edit");
menuBar.add(addMenu);
String listItem[] =
{ "Sapporo", "Sendai", "Chiba", "Tokyo", "Shizuoka", "Nagoya", "Osaka", "Okayama", "Hiroshima", "Fukuoka" };
listModel = new DefaultListModel();
for (int i = 0; i < listItem.length; i++) {
listModel.addElement(listItem[i]);
}
list = new JList(listModel);
getContentPane().add(new JScrollPane(list));
addMenuItem = new JMenuItem("add");
addMenuItem.addActionListener(this);
addMenu.add(addMenuItem);
pack();
}
public void actionPerformed(ActionEvent event) {
AddCityDialog dialog = new AddCityDialog(this);
dialog.show();
if (dialog.isButtonPressed()) {
listModel.addElement(dialog.getInputCity());
}
}
public static void main(String args[]) {
new DialogFrame().setVisible(true);
}
}
class AddCityDialog extends JDialog implements ActionListener {
private JTextField cityField;
private boolean buttonPressed;
public AddCityDialog(Frame owner) {
super(owner, "add a city", true);
cityField = new JTextField();
getContentPane().add(cityField);
JButton addButton = new JButton("add");
addButton.addActionListener(this);
getContentPane().add(addButton, BorderLayout.SOUTH);
pack();
}
public boolean isButtonPressed() {
return (buttonPressed);
}
public String getInputCity() {
return (cityField.getText());
}
public void actionPerformed(ActionEvent e) {
if (!cityField.getText().equals("")) {
buttonPressed = true;
}
this.hide();
}
}

