解答例 - 実習課題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(); } }