解答例 - 実習課題1 - 10.テキスト・コンポーネント
(実習課題1)
以下のプログラムを作成しなさい。
- 社員名を管理するプログラムを作成する。
- ウィンドウに含まれるコンポーネント、およびその働きは以下の通り。
- 新たに社員名を追加するためのテキストフィールドと「追加」ボタン
- 社員名を表示するためのリスト
- リストで選択した社員を削除するための「削除」ボタン
- 「追加」ボタンが押されるとテキストフィールドに入力されている内容がリストに追加される。何も入力されていない場合は追加しない。
解答例
/** * JTextFieldFrame.java * TECHSCORE Javaユーザインタフェース10章 実習課題1 * * Copyright (c) 2004 Four-Dimensional Data, Inc. */ package com.techscore.ui.chapter10.exercise1; import java.awt.BorderLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; 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.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; public class JTextFieldFrame extends JFrame implements ActionListener { private JTextField textfield; private JButton deleteButton; private JButton addButton; private DefaultListModel model = new DefaultListModel(); private JList list; public JTextFieldFrame() { super("JTextFieldFrame"); setDefaultCloseOperation(EXIT_ON_CLOSE); JLabel input = new JLabel("リストに追加したい社員名を入力して下さい"); JLabel delete = new JLabel("削除したい社員データを以下のリストより選択し、削除ボタンを押して下さい"); //テキストフィールドを作成 textfield = new JTextField(30); textfield.setEditable(true); //リストを作成 JScrollPane scrollPane = new JScrollPane(); list = new JList(model); scrollPane.getViewport().add(list); //追加ボタンを作成 addButton = new JButton("追加"); addButton.addActionListener(this); //削除ボタンを作成 deleteButton = new JButton("削除"); deleteButton.addActionListener(this); //フィールド,リスト、ボタンを配置 GridBagLayout layout = new GridBagLayout(); JPanel panel = new JPanel(layout); getContentPane().add(panel, BorderLayout.CENTER); GridBagConstraints c = new GridBagConstraints(); c.gridx = 0; c.gridy = 0; c.gridwidth = 4; c.fill = GridBagConstraints.HORIZONTAL; layout.setConstraints(input, c); panel.add(input); c.gridx = 0; c.gridy = 1; c.gridwidth = 3; layout.setConstraints(textfield, c); panel.add(textfield); c.gridx = 3; c.gridy = 1; c.gridwidth = 1; layout.setConstraints(addButton, c); panel.add(addButton); c.gridx = 0; c.gridy = 2; c.gridwidth = 3; layout.setConstraints(delete, c); panel.add(delete); c.gridx = 3; c.gridy = 2; c.gridwidth = 1; layout.setConstraints(deleteButton, c); panel.add(deleteButton); getContentPane().add(scrollPane, BorderLayout.SOUTH); pack(); } //追加ボタンを押すと、記述された社員名がリストに追加 //削除ボタンを押すと、選択された社員名がリストより削除 public void actionPerformed(ActionEvent e) { if (e.getSource() == addButton) { String str = textfield.getText(); for (int i = 0; i < str.length(); i++) { if (!Character.isISOControl(str.charAt(i)) && !Character.isWhitespace(str.charAt(i))) { System.out.println("insert!!"); model.addElement(str); break; } } } else if (e.getSource() == deleteButton) { Object items[] = list.getSelectedValues(); for (int i = 0; i < items.length; i++) { model.removeElement(items[i]); } } } public static void main(String args[]) { new JTextFieldFrame().setVisible(true); } }