解答例 - 実習課題2 - 9.基本的なコンポーネント3
(実習課題2)
実習課題1のプログラムを改良しなさい。
- 「消去」ボタンを追加し、そのボタンを押すと選択された都市がリストから削除されるようにする事。
- リストデータの管理に「DefaultListModel」クラスを使用する事。
- (ヒント)リストからの削除は「DefaultListModel」クラスに対して行う。
- (ヒント)「DefaultListModel」の使い方は「Vector」とほぼ同じ。
解答例
/** * DeletableListFrame.java * TECHSCORE Javaユーザインタフェース9章 実習課題2 * * Copyright (c) 2004 Four-Dimensional Data, Inc. */ package com.techscore.ui.chapter9.exercise2; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; public class DeletableListFrame extends JFrame implements ActionListener { private JList list; private JButton printButton, deleteButton; private DefaultListModel listModel; private final String listItem[] = { "Sapporo", "Sendai", "Chiba", "Tokyo", "Shizuoka", "Nagoya", "Osaka", "Okayama", "Hiroshima", "Fukuoka" }; public DeletableListFrame() { super("DeletableListFrame"); setDefaultCloseOperation(EXIT_ON_CLOSE); listModel = new DefaultListModel(); for (int i = 0; i < listItem.length; i++) { listModel.addElement(listItem[i]); } list = new JList(listModel); JScrollPane listPane = new JScrollPane(list); getContentPane().add(listPane, BorderLayout.CENTER); JPanel buttonPanel = new JPanel(new GridLayout(1, 2)); getContentPane().add(buttonPanel, BorderLayout.SOUTH); printButton = new JButton("print"); printButton.addActionListener(this); buttonPanel.add(printButton); deleteButton = new JButton("delete"); deleteButton.addActionListener(this); buttonPanel.add(deleteButton); pack(); } public void actionPerformed(ActionEvent e) { int selectedIndices[] = list.getSelectedIndices(); if (e.getSource().equals(printButton)) { System.out.println("--- selected cities ---"); for (int i = 0; i < selectedIndices.length; i++) { System.out.println((String) listModel.elementAt(selectedIndices[i])); } } else if (e.getSource().equals(deleteButton)) { // 昇順で削除すると誤動作する。 for (int i = selectedIndices.length - 1; i >= 0; i--) { listModel.removeElementAt(selectedIndices[i]); } } } public static void main(String args[]) { new DeletableListFrame().setVisible(true); } }