初心者向けのJava講座です。一緒にJavaを勉強しませんか?
はじめてのJava入門初心者向けのJava講座 |
HOME>テキストエディタの作成
Javaでテキストエディタを作ろう
ここでは、管理人がSwingで作成したシンプルなテキストエディタの紹介をします。
自由にダウンロードしても構いませんが著作権は放棄していません。
あくまでも勉強用に作成したので実用的ではありません
詳しいプログラムの解説はダウンロードファイルの中のMyEditor.javaファイル内にコメントとして掲載しております。
サンプルプログラム(MyEditor.java)
import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.*; class MyEditor { public static void main(String args[]){ JTextArea ta = new JTextArea(); ta.setFont(new Font("Dialog",Font.PLAIN,12)); ta.setTabSize(4); EditorMenu em = new EditorMenu(ta); EditFace ef = new EditFace(ta,em); } } class EditFace extends JFrame { EditFace(JTextArea ta,EditorMenu em){ super("はじめてのJava入門"); Container c = getContentPane(); c.setLayout(new BorderLayout()); c.add(em,BorderLayout.NORTH); JScrollPane sp = new JScrollPane(ta); c.add(sp,BorderLayout.CENTER); setSize(800,600); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); } } class EditorMenu extends JMenuBar { EditorMenu(JTextArea ta){ super(); FileMenu m1 = new FileMenu(ta); EditMenu m2 = new EditMenu(ta); ViewMenu m3 = new ViewMenu(ta); HelpMenu m4 = new HelpMenu(ta); add(m1); add(m2); add(m3); add(m4); } } class FileMenu extends JMenu implements ActionListener { JTextArea ta; JMenuItem mi1; JMenuItem mi2; JMenuItem mi3; JMenuItem mi4; JMenuItem mi5; FileMenu(JTextArea ta){ super("ファイル"); this.ta = ta; mi1 = new JMenuItem("新規作成"); mi2 = new JMenuItem("開く"); mi3 = new JMenuItem("上書き保存"); mi4 = new JMenuItem("名前をつけて保存"); mi5 = new JMenuItem("閉じる"); mi1.addActionListener(this); mi2.addActionListener(this); mi3.addActionListener(this); mi4.addActionListener(this); mi5.addActionListener(this); add(mi1); add(mi2); add(mi3); add(mi4); add(mi5); } public void actionPerformed(ActionEvent e){ EditFileAccess efa = new EditFileAccess(); Object o = e.getSource(); if (o == mi1){ ta.setText(""); }else if (o == mi2){ ta.setText(""); efa.fileOpen(ta); }else if (o == mi3){ if (EditorStatus.FILENAME.equals("")){ efa.fileSave(ta); }else{ efa.overWrite(ta); } }else if (o == mi4){ efa.fileSave(ta); }else if (o == mi5){ System.exit(0); } } } class EditMenu extends JMenu implements ActionListener { JTextArea ta; JMenuItem mi1; JMenuItem mi2; JMenuItem mi3; JMenuItem mi4; EditMenu(JTextArea ta){ super("編集"); this.ta = ta; mi1 = new JMenuItem("切り取り"); mi2 = new JMenuItem("コピー"); mi3 = new JMenuItem("ペースト"); mi4 = new JMenuItem("すべて選択"); mi1.addActionListener(this); mi2.addActionListener(this); mi3.addActionListener(this); mi4.addActionListener(this); add(mi1); add(mi2); add(mi3); add(mi4); } public void actionPerformed(ActionEvent e){ Object o = e.getSource(); if (o == mi1){ ta.cut(); }else if (o == mi2){ ta.copy(); }else if (o == mi3){ ta.paste(); }else if (o == mi4){ ta.selectAll(); } } } class ViewMenu extends JMenu implements ActionListener { JTextArea ta; JMenuItem mi1; JMenuItem mi2; JMenuItem mi3; JMenuItem mi4; ViewMenu(JTextArea ta){ super("表示"); this.ta = ta; mi1 = new JMenuItem("文字を拡大"); mi2 = new JMenuItem("文字を縮小"); mi3 = new JMenuItem("フォントのサイズを指定"); mi4 = new JMenuItem("タブのサイズを指定"); mi1.addActionListener(this); mi2.addActionListener(this); mi3.addActionListener(this); mi4.addActionListener(this); add(mi1); add(mi2); add(mi3); add(mi4); } public void actionPerformed(ActionEvent e){ Object o = e.getSource(); if (o == mi1){ int size = ta.getFont().getSize(); size++; String name = ta.getFont().getName(); int style = ta.getFont().getStyle(); ta.setFont(new Font(name,style,size)); }else if (o == mi2){ int size = ta.getFont().getSize(); size--; String name = ta.getFont().getName(); int style = ta.getFont().getStyle(); ta.setFont(new Font(name,style,size)); }else if (o == mi3){ String sizeString = JOptionPane.showInputDialog ("フォントサイズを入力してください"); if (sizeString == null){ return; }else{ int size = Integer.parseInt(sizeString); String name = ta.getFont().getName(); int style = ta.getFont().getStyle(); ta.setFont(new Font(name,style,size)); } }else if (o == mi4){ String tabString = JOptionPane.showInputDialog ("タブサイズを入力してください"); if (tabString == null){ return; }else{ int tabs = Integer.parseInt(tabString); ta.setTabSize(tabs); } } } } class HelpMenu extends JMenu implements ActionListener { JTextArea ta; JMenuItem mi1; JMenuItem mi2; HelpMenu(JTextArea ta){ super("ヘルプ"); this.ta = ta; mi1 = new JMenuItem("バージョン情報"); mi1.addActionListener(this); add(mi1); } public void actionPerformed(ActionEvent e){ Object o = e.getSource(); if (o == mi1){ JOptionPane.showMessageDialog( (Component)null, "はじめてのJava入門\nVersjon 1\n Copyright (C) 2012 by takeharu narita\nuser takeharu narita\n -------------------------------------------------\n http://www1.bbiq.jp/takeharu/", "バージョン情報", JOptionPane.INFORMATION_MESSAGE); } } } class EditFileAccess { public void fileOpen(JTextArea ta){ JFileChooser fc = new JFileChooser(); fc.showOpenDialog(null); File f = fc.getSelectedFile(); try{ BufferedReader br = new BufferedReader(new FileReader(f)); String s; while ((s = br.readLine()) != null){ ta.append(s + '\n'); } } catch(IOException e){ return; } EditorStatus.FILENAME = f.getPath(); } public void fileSave(JTextArea ta){ JFileChooser fc = new JFileChooser(); fc.showSaveDialog(null); File f = fc.getSelectedFile(); try{ PrintWriter pw = new PrintWriter(new FileWriter(f,false)); String s = ta.getText(); String st[] = s.split("\n"); int limit = st.length; for (int i = 0;i < limit;i++){ pw.println(st[i]); } pw.close(); } catch(IOException e){ return; } EditorStatus.FILENAME = f.getPath(); } public void overWrite(JTextArea ta){ File f = new File(EditorStatus.FILENAME); try{ PrintWriter pw = new PrintWriter(new FileWriter(f,false)); String s = ta.getText(); String st[] = s.split("\n"); int limit = st.length; for (int i = 0;i < limit;i++){ pw.println(st[i]); } pw.close(); } catch(IOException e){ return; } } } class EditorStatus { static String FILENAME = ""; }
解説
- インポート宣言
- GUIのためにjava.awt,javax.swingパッケージをインポート
- イベント処理のためにjava.awt.eventパッケージをインポート
- ファイルアクセスのためにjava.ioパッケージをインポート
- class MyEditor(メインクラス)
- class EditFace(ここでは土台となるウィンドウサイズやレイアウトの設定)
- class EditorMenu(ここではメニューバーの設定を行っています)
- class FileMenu(ここではファイルメニューの設定を行っています)
- class EditMenu(ここでは編集メニューの設定を行っています)
- class ViewMenu(ここでは表示メニューの設定を行っています
- class HelpMenu(ここではヘルプメニューの設定を行っています
- class EditFileAccess(ここではファイルアクセスのための処理を行っています
- class EditorStatus(ここでは読み込んだファイルの保管するオブジェクト)