解答例 - 実習課題2 - 10.テキスト・コンポーネント
(実習課題2)
以下のプログラムを作成しなさい。
- ウィンドウに含まれるコンポーネントはテキストエリアと、そのフォントを切り替えるためのコンポーネント。
- フォント名を指定するためのリスト。論理フォントだけを対象にして良い。
- フォント・スタイルを指定するためのチェックボックス。
- フォントのサイズを入力するためのテキストフィールド。
- 「変更」ボタンを押すと、テキストエリアのフォントが切り替わる
解答例
package com.techscore.ui.chapter10.exercise2;
/**
* JTextAreaFrame.java
* TECHSCORE Javaユーザインタフェース10章 実習課題2
*
* Copyright (c) 2004 Four-Dimensional Data, Inc.
*/
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
public class JTextAreaFrame extends JFrame implements ActionListener {
private JList list;
private String listData[] = { "Serif", "SansSerif", "Monospaces", "Dialog", "DialogInput", "Symobol" };
private JCheckBox Style[] = { new JCheckBox("BOLD"), new JCheckBox("ITALIC")};
private JTextField textField;
private JTextArea textArea;
public JTextAreaFrame() {
super("JTextAreaFrame");
setDefaultCloseOperation(EXIT_ON_CLOSE);
//テキストエリアを作成
textArea = new JTextArea("Sample", 10, 4);
//フォントを操作するための、コンポーネントを作成
//リストを作成
list = new JList(listData);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
//フォントサイズを設定するテキストフィールドを作成
textField = new JTextField(3);
//変更ボタンを作成
JButton change = new JButton("変更");
change.addActionListener(this);
//各コンポーネントをウィンドウに配置
JScrollPane areaPane = new JScrollPane();
getContentPane().add(areaPane, BorderLayout.NORTH);
areaPane.setPreferredSize(new Dimension(200, 100));
areaPane.getViewport().add(textArea);
JPanel panel = new JPanel();
getContentPane().add(panel, BorderLayout.SOUTH);
Box fontBox = new Box(BoxLayout.Y_AXIS);
panel.add(fontBox);
fontBox.add(new JLabel("フォントを指定してください"));
JScrollPane scrollPane = new JScrollPane();
fontBox.add(scrollPane);
scrollPane.getViewport().add(list);
Box styleBox = new Box(BoxLayout.Y_AXIS);
panel.add(styleBox);
styleBox.add(new JLabel("スタイルを選択してください"));
for (int i = 0; i < Style.length; i++) {
styleBox.add(Style[i]);
}
Box sizeBox = new Box(BoxLayout.Y_AXIS);
panel.add(sizeBox);
sizeBox.add(new JLabel("フォントの大きさを記述してください"));
sizeBox.add(textField);
panel.add(change);
pack();
}
//変更ボタンを押すと、フォントが変更される
public void actionPerformed(ActionEvent e) {
//フォントを設定
String font = (String) list.getSelectedValue();
//スタイルを設定
int style;
if (Style[0].isSelected() && Style[1].isSelected()) {
style = (Font.BOLD | Font.ITALIC);
} else if (Style[0].isSelected()) {
style = Font.BOLD;
} else if (Style[1].isSelected()) {
style = Font.ITALIC;
} else {
style = Font.PLAIN;
}
//フォントのサイズを設定
String tmpsize = textField.getText();
int size;
int flag = 0;
if (tmpsize.length() == 0) {
flag = 1;
}
for (int i = 0; i < tmpsize.length(); i++) {
if (!Character.isDigit(tmpsize.charAt(i))) {
flag = 1;
break;
}
}
if (flag == 0) {
size = Integer.parseInt(tmpsize);
} else {
size = 20;
}
if (!(size > 0 && size < 100)) {
size = 20;
}
//テキストエリアのフォントを変更
textArea.setFont(new Font(font, style, size));
}
public static void main(String args[]) {
new JTextAreaFrame().setVisible(true);
}
}

