|
テキストファイルを読み込み表示するウィンドウ。使用するフォントの選択が出来る。 |
使用できるフォントのリストを得るためには、GraphicsEnvironment クラスの getAvailableFontFamilyNames メソッドを使います。
(例)
String[] fontList = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
JLabelでは1行分のテキストしか表示することが出来ません。複数のテキストを表示するためには、JTextArea、JEditorPane、JTextPaneなどを使いますが、これらは背景の色がJLabelと違います。なので背景色を変えます。色の取得方法については、次の『GUIのある部分で使用している色を取得する』も参考にしてください。
(例)
textPane = new JTextPane();
textPane.setEnabled(false);
textPane.setBackground(UIManager.getColor("control"));
現在の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 : 山崎まさよし - アトリエ