Sample3

Sample3の画像 テキストファイルを読み込み表示するウィンドウ。使用するフォントの選択が出来る。

ソースファイル

Sample3.jar Sample3.java


小技

使用できるフォントのリストを作成する

使用できるフォントのリストを得るためには、GraphicsEnvironment クラスの getAvailableFontFamilyNames メソッドを使います。

(例)
String[] fontList = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();

JLabelっぽく複数行のテキストを表示する

JLabelでは1行分のテキストしか表示することが出来ません。複数のテキストを表示するためには、JTextArea、JEditorPane、JTextPaneなどを使いますが、これらは背景の色がJLabelと違います。なので背景色を変えます。色の取得方法については、次の『GUIのある部分で使用している色を取得する』も参考にしてください。

(例)
textPane = new JTextPane();
textPane.setEnabled(false);
textPane.setBackground(UIManager.getColor("control"));

GUIのある部分で使用している色を取得する

現在のUIで使用している色を取得するためには、UIManager クラスの getColor メソッドを使います。グラデーションしている部分では、同じものを取得できる場合もあるみたいです。引数の部分の key には、SystemColor クラスのフィールドで宣言されているものと同じものが入るようです。残念ながら、これを使って色を指定しても、OSによる違いが生じてしまう場合があります。

(例)
textPane.setBackground(UIManager.getColor("control"));

今回のソース


/*
 * Sample3.java
 * 2003/07/12
 * kota
 */

import java.awt.*;
import java.awt.event.*;
import java.io.*;

import javax.swing.*;

/**
 * @author kota
 */
public class Sample3 extends JFrame implements ActionListener, ItemListener {
	private static final int FONT_SIZE = 15;

	private JComboBox comboBox;
	private JTextPane textPane;

	public static void main(String[] args) {
		Sample3 sample3 = new Sample3("Sample3");
		sample3.setVisible(true);
	}

	public Sample3(String title) {
		super(title);

		changeLookAndFeel();
		initMenuBar();
		initComponents();
		pack();
		setCenterLocation(this);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		fontChange();
	}

	/*
	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
	 */
	public void actionPerformed(ActionEvent e) {
		openFile();
	}

	/*
	 * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
	 */
	public void itemStateChanged(ItemEvent arg0) {
		fontChange();
	}

	/**
	 * ファイルを開く。
	 */
	private void openFile() {
		JFileChooser fileChooser = new JFileChooser();
		if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
			File file = fileChooser.getSelectedFile();
			try {
				FileReader reader = new FileReader(file);
				textPane.read(reader, null);
				setTitle(file.getName());
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 使用するフォントを変更する。
	 */
	private void fontChange() {
		String fontName = (String) comboBox.getSelectedItem();
		Font font = new Font(fontName, Font.PLAIN, FONT_SIZE);
		textPane.setFont(font);
	}

	/**
	 * メニューバーを作成する。
	 */
	private void initMenuBar() {
		JMenuBar menuBar = new JMenuBar();
		JMenu fileMenu = new JMenu("File");
		fileMenu.setMnemonic('f');

		JMenuItem openMenuItem = new JMenuItem("Open");
		openMenuItem.setMnemonic('o');
		openMenuItem.addActionListener(this);
		fileMenu.add(openMenuItem);
		menuBar.add(fileMenu);
		setJMenuBar(menuBar);
	}

	/**
	 * ウィンドウの内部のコンポーネントを作成する。
	 */
	private void initComponents() {
		Container container = getContentPane();
		container.setLayout(new BorderLayout());

		comboBox = new JComboBox(getFontList());
		comboBox.addItemListener(this);

		textPane = new JTextPane();
		textPane.setEnabled(false);
		textPane.setPreferredSize(new Dimension(100, 100));
		textPane.setBackground(UIManager.getColor("control"));

		container.add(comboBox, BorderLayout.NORTH);
		container.add(textPane, BorderLayout.CENTER);
	}

	/**
	 * フォントリストの一覧を取得する。
	 * @return フォントリスト
	 */
	private String[] getFontList() {
		return GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
	}

	/**
	 * ウィンドウをディスプレイの中心に配置する。
	 * @param frame ウィンドウ
	 */
	private void setCenterLocation(JFrame frame) {
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		int x = (d.width - frame.getWidth()) / 2;
		int y = (d.height - frame.getHeight()) / 2;
		frame.setLocation(x, y);
	}

	/**
	 * Look & Feel をOSのものに変更
	 */
	private void changeLookAndFeel() {
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

SITE TOP BGM : 山崎まさよし - アトリエ