目次へ

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

}

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp