import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;
import javax.swing.*;
import javax.swing.filechooser.*;
class TextEditor extends JFrame implements ActionListener {
// プライベート変数
private JToolBar toolBar;
private JLabel statusBar;
private JTextArea textArea;
private JFileChooser fileChooser = new JFileChooser();
//////////////////////////////////////////////////////////
// 初期化
//////////////////////////////////////////////////////////
// コンストラクタ
TextEditor() {
// Look&FeelをWindowsモードにする
OnLookAndFeel("Windows");
// タイトルバーを設定する
setTitle("新規文書");
// メニューバーを作成する
InitMenuBar();
// ツールバーを作成する
InitToolBar();
// ステータスバーを作成する
InitStatusBar();
// テキストエリアを作成する
InitTextArea(400, 500);
// ウィンドウを閉じたときにアプリケーションを終了する
setDefaultCloseOperation(this.EXIT_ON_CLOSE);
// ウィンドウを適切な大きさにする
pack();
// テキストエリアにフォーカスを当てる
textArea.grabFocus();
// ウィンドウを可視化する
setVisible(true);
}
// メニューバーを作成する
void InitMenuBar() {
// メニューバー
JMenuBar menuBar = new JMenuBar();
getRootPane().setJMenuBar(menuBar);
// [ファイル]
JMenu menuFile = new JMenu("ファイル(F)");
menuFile.setMnemonic('F');
menuBar.add(menuFile);
// [ファイル]-[新規作成]
JMenuItem menuNew = new JMenuItem("新規作成(N)");
menuNew.setMnemonic('N');
menuNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, Event.CTRL_MASK));
menuNew.setActionCommand("New");
menuNew.addActionListener(this);
menuFile.add(menuNew);
// [ファイル]-[開く]
JMenuItem menuOpen = new JMenuItem("開く(O)...");
menuOpen.setMnemonic('O');
menuOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, Event.CTRL_MASK));
menuOpen.setActionCommand("Open");
menuOpen.addActionListener(this);
menuFile.add(menuOpen);
// [ファイル]-[上書き保存]
JMenuItem menuSave = new JMenuItem("上書き保存(S)");
menuSave.setMnemonic('S');
menuSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, Event.CTRL_MASK));
menuSave.setActionCommand("Save");
menuSave.addActionListener(this);
menuFile.add(menuSave);
// [ファイル]-[名前をつけて保存]
JMenuItem menuSaveAs = new JMenuItem("名前を付けて保存(A)...");
menuSaveAs.setMnemonic('A');
menuSaveAs.setActionCommand("SaveAs");
menuSaveAs.addActionListener(this);
menuFile.add(menuSaveAs);
// [ファイル]-[印刷]
JMenuItem menuPrint = new JMenuItem("印刷(P)...");
menuPrint.setMnemonic('P');
menuPrint.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, Event.CTRL_MASK));
menuPrint.setActionCommand("Print");
menuPrint.addActionListener(this);
menuFile.add(menuPrint);
// [ファイル]-[終了]
JMenuItem menuExit = new JMenuItem("終了(X)");
menuExit.setMnemonic('X');
menuExit.setActionCommand("Exit");
menuExit.addActionListener(this);
menuFile.add(menuExit);
// [編集]
JMenu menuEdit = new JMenu("編集(E)");
menuEdit.setMnemonic('E');
menuBar.add(menuEdit);
// [編集]-[切り取り]
JMenuItem menuCut = new JMenuItem("切り取り(T)");
menuCut.setMnemonic('T');
menuCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, Event.CTRL_MASK));
menuCut.setActionCommand("Cut");
menuCut.addActionListener(this);
menuEdit.add(menuCut);
// [編集]-[コピー]
JMenuItem menuCopy = new JMenuItem("コピー(C)");
menuCopy.setMnemonic('C');
menuCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, Event.CTRL_MASK));
menuCopy.setActionCommand("Copy");
menuCopy.addActionListener(this);
menuEdit.add(menuCopy);
// [編集]-[貼り付け]
JMenuItem menuPaste = new JMenuItem("貼り付け(P)");
menuPaste.setMnemonic('P');
menuPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, Event.CTRL_MASK));
menuPaste.setActionCommand("Paste");
menuPaste.addActionListener(this);
menuEdit.add(menuPaste);
// [表示]
JMenu menuView = new JMenu("表示(V)");
menuView.setMnemonic('V');
menuBar.add(menuView);
// [表示]-[ツールバー]
JCheckBoxMenuItem menuToolBar = new JCheckBoxMenuItem("ツールバー(T)", true);
menuToolBar.setMnemonic('T');
menuToolBar.setActionCommand("ToolBar");
menuToolBar.addActionListener(this);
menuView.add(menuToolBar);
// [表示]-[ステータスバー]
JCheckBoxMenuItem menuStatusBar = new JCheckBoxMenuItem("ステータスバー(S)", true);
menuStatusBar.setMnemonic('S');
menuStatusBar.setActionCommand("StatusBar");
menuStatusBar.addActionListener(this);
menuView.add(menuStatusBar);
// [表示]-[見栄え]
JMenu menuLookFeel = new JMenu("見栄え(L)");
menuLookFeel.setMnemonic('L');
menuView.add(menuLookFeel);
// [表示]-[見栄え]-[Metal]
JMenuItem menuMetal = new JMenuItem("Metal(M)");
menuMetal.setMnemonic('M');
menuMetal.setActionCommand("Metal");
menuMetal.addActionListener(this);
menuLookFeel.add(menuMetal);
// [表示]-[見栄え]-[Windows]
JMenuItem menuWindows = new JMenuItem("Windows(W)");
menuWindows.setMnemonic('W');
menuWindows.setActionCommand("Windows");
menuWindows.addActionListener(this);
menuLookFeel.add(menuWindows);
// [表示]-[見栄え]-[Motif]
JMenuItem menuMotif = new JMenuItem("Motif(T)");
menuMotif.setMnemonic('T');
menuMotif.setActionCommand("Motif");
menuMotif.addActionListener(this);
menuLookFeel.add(menuMotif);
// [ヘルプ]
JMenu menuHelp = new JMenu("ヘルプ(H)");
menuHelp.setMnemonic('H');
menuBar.add(menuHelp);
// [ヘルプ]-[バージョン情報]
JMenuItem menuAboud = new JMenuItem("バージョン情報(A)...");
menuAboud.setMnemonic('A');
menuAboud.setActionCommand("About");
menuAboud.addActionListener(this);
menuHelp.add(menuAboud);
}
// ツールバーを作成する
void InitToolBar() {
toolBar = new JToolBar();
toolBar.setFloatable(false);
// toolBar.add(new JButton(new ImageIcon("new.gif")));
JButton btnNew = new JButton("新");
JButton btnOpen = new JButton("開");
JButton btnSave = new JButton("保");
JButton btnAbout = new JButton("?");
btnNew.setActionCommand("New");
btnOpen.setActionCommand("Open");
btnSave.setActionCommand("Save");
btnAbout.setActionCommand("About");
btnNew.addActionListener(this);
btnOpen.addActionListener(this);
btnSave.addActionListener(this);
btnAbout.addActionListener(this);
toolBar.add(btnNew);
toolBar.add(btnOpen);
toolBar.add(btnSave);
toolBar.addSeparator();
toolBar.add(btnAbout);
getContentPane().add(toolBar, BorderLayout.NORTH);
}
// ステータスバーを作成する
void InitStatusBar() {
statusBar = new JLabel(" ");
getContentPane().add(statusBar, BorderLayout.SOUTH);
}
// テキストエリアを作成する
void InitTextArea(int width, int height) {
textArea = new JTextArea();
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
JScrollPane scroll = new JScrollPane(textArea);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scroll.setPreferredSize(new Dimension(width, height));
getContentPane().add(scroll, BorderLayout.CENTER);
}
//////////////////////////////////////////////////////////
// イベント処理
//////////////////////////////////////////////////////////
// イベント処理
public void actionPerformed(ActionEvent ae) {
String cmd = ae.getActionCommand();
if (cmd.equals("New")) {
OnNew();
} else if (cmd.equals("Open")) {
OnOpen();
} else if (cmd.equals("Save")) {
OnSave();
} else if (cmd.equals("SaveAs")) {
OnSaveAs();
} else if (cmd.equals("Print")) {
// 未実装
} else if (cmd.equals("Exit")) {
OnExit();
} else if (cmd.equals("Cut")) {
OnCut();
} else if (cmd.equals("Copy")) {
OnCopy();
} else if (cmd.equals("Paste")) {
OnPaste()