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

