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