Java @ mock
テキストエディタソースver1.2
最終更新:
Bot(ページ名リンク)
-
view
テキストエディタソースver1.2
Main.java
/** * * メインクラスです。 * @author mock * @version 1.2 * */ public class Main { /** * メインメソッドです * @param args */ public static void main([[String]][] args) { new TextEditor(); } }
TextEditor.java
import java.awt.HeadlessException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JTextArea; /** * テキストエディタクラスです * * @author mock */ public class TextEditor extends JFrame implements ActionListener { /** serialVersionUID */ private static final [[long]] serialVersionUID = 1L; /** テキストエリア */ public JTextArea textArea; /** ファイル選択 */ public JFileChooser fileChooser = new JFileChooser(); /** logic */ public Logic logic = new LogicImpl(); /** actionLogic */ public ActionLogic actionLogic = new ActionLogicImpl(); /** * コンストラクタ * * @throws HeadlessException */ public TextEditor() throws HeadlessException { TextAreaProperties textAreaProperties = logic.getInitProperties(); setTitle(Constants.UNDIFINED_TITLE); logic.createMenuBar(getRootPane(), this); textArea = logic.createTextArea(textAreaProperties, this); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); pack(); } /* * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) */ @Override public void actionPerformed(ActionEvent actionEvent) { String actionCommand = actionEvent.getActionCommand(); TextEditorModel model = new TextEditorModel(); model.setFrame(this); model.setTextArea(textArea); model.setFileChooser(fileChooser); if (actionCommand.equals(Constants.MenuItem.NEW.toString())) { fileChooser = actionLogic.newFile(model); } else if (actionCommand.equals(Constants.MenuItem.OPEN.toString())) { actionLogic.openFile(model); } else if (actionCommand.equals(Constants.MenuItem.SAVE.toString())) { actionLogic.save(model); } else if (actionCommand.equals(Constants.MenuItem.SAVE_AS.toString())) { actionLogic.saveAs(model); } else if (actionCommand.equals(Constants.MenuItem.VERSION.toString())) { actionLogic.showVersionInfo(model); } } }
TextEditorModel.java
import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JTextArea; /** * テキストエディタに関するモデルです * @author mock * */ public class TextEditorModel { /** フレーム */ private JFrame frame; /** ファイルチューザ */ private JFileChooser fileChooser; /** テキストエリア */ private JTextArea textArea; /** * @return the frame */ public JFrame getFrame() { [[return]] frame; } /** * @param frame the frame to set */ public void setFrame(JFrame frame) { this.frame = frame; } /** * @return the fileChooser */ public JFileChooser getFileChooser() { return fileChooser; } /** * @param fileChooser the fileChooser to set */ public void setFileChooser(JFileChooser fileChooser) { this.fileChooser = fileChooser; } /** * @return the textArea */ public JTextArea getTextArea() { return textArea; } /** * @param textArea the textArea to set */ public void setTextArea(JTextArea textArea) { this.textArea = textArea; } }
Constants.java
import java.awt.event.KeyEvent; /** * 定数を集めたクラスです。 * * @author mock * */ public class Constants { /** 新規のタイトル名 */ public static final String UNDIFINED_TITLE = "UNDIFINED_TITLE"; /** バージョン */ public static final String VERSION = "ver1.2"; /** バージョン情報タイトル */ public static final String VERSION_TITLE = "VERSION"; /** ファイル(F)メニューラベル */ public static final String MENU_FILE_LABEL = "ファイル(F)"; /** ヘルプ(H)メニューラベル */ public static final String MENU_HELP_LABEL = "ヘルプ(H)"; public static final String INI_FILE_NAME = "texteditor.ini"; /** * メニュー項目に関する定数 * * @author mock * */ public enum MenuItem { NEW("新規(N)", KeyEvent.VK_N), OPEN("開く(O)", KeyEvent.VK_O), SAVE("上書き保存(S)", KeyEvent.VK_S), SAVE_AS("名前を付けて保存(A)", KeyEvent.VK_A), VERSION("バージョン情報(A)", KeyEvent.VK_A), ; /** メニュー項目ラベル */ private String label; /** メニュー項目ニーモニック */ private [[int]] mnemonic; /** * @param label * メニュー項目ラベル * @param mnemonic * メニュー項目ニーモニック */ MenuItem(String label, int mnemonic) { this.label = label; this.mnemonic = mnemonic; } /** * @return メニュー項目ラベル */ public final String getLabel() { return this.label; } /** * @return メニュー項目ニーモニック */ public final int getMnemonic() { return this.mnemonic; } } }
TextAreaProperties.java
/** * テキストエリアに関するプロパティクラスです * @author mock */ public class TextAreaProperties { /** 幅 */ private int width; /** 高さ */ private int height; /** タブサイズ */ private int tabSize; /** フォントサイズ */ private int fontSize; /** * @return the width */ public int getWidth() { return width; } /** * @param width the width to set */ public void setWidth(int width) { this.width = width; } /** * @return the height */ public int getHeight() { return height; } /** * @param height the height to set */ public void setHeight(int height) { this.height = height; } /** * @return the tabSize */ public int getTabSize() { return tabSize; } /** * @param tabSize the tabSize to set */ public void setTabSize(int tabSize) { this.tabSize = tabSize; } /** * @return the fontSize */ public int getFontSize() { return fontSize; } /** * @param fontSize the fontSize to set */ public void setFontSize(int fontSize) { this.fontSize = fontSize; } }
Logic.java
import java.awt.event.ActionListener; import java.io.File; import javax.swing.JFrame; import javax.swing.JMenuItem; import javax.swing.JRootPane; import javax.swing.JTextArea; /** * テキストエディタに関するロジックのインターフェースです * * @author mock */ public interface Logic { /** * 初期設定プロパティを取得します * * @return テキストエリアに関するプロパティ */ public TextAreaProperties getInitProperties(); /** * メニューバーを作成します * * @param rootPane * コンテナ * @param actionListener * アクションリスナー */ public void createMenuBar(JRootPane rootPane, ActionListener actionListener); /** * メニュー項目を設定します * * @param item * メニュー項目 * @param actionListener * アクションリスナー * @return メニュー項目 */ public JMenuItem setMenuItem(Constants.MenuItem item, ActionListener actionListener); /** * テキストエリアを作成します * * @param properties * テキストエリアに関するプロパティ * @param frame * フレーム * @return テキストエリア */ public JTextArea createTextArea(TextAreaProperties properties, JFrame frame); /** * ファイルにテキスト内容を書き込みます * * @param file * ファイル * @param text * テキスト内容 * @return 処理結果 */ public [[boolean]] writeFile(File file, String text); }
LogicImpl.java
import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.util.Properties; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JRootPane; import javax.swing.JScrollPane; import javax.swing.JTextArea; /** * テキストエディタに関するロジックの実装クラスです * * @author mock */ public class LogicImpl implements Logic { /* * @see Logic#getInitProperties() */ @Override public TextAreaProperties getInitProperties() { TextAreaProperties textAreaProperties = new TextAreaProperties(); try { Properties properties = new Properties(); properties.load(new FileInputStream(Constants.INI_FILE_NAME)); // 幅の設定 String width = properties.getProperty("textAreaWidth"); textAreaProperties.setWidth(Integer.parseInt(width)); // 高さの設定 String height = properties.getProperty("textAreaHeight"); textAreaProperties.setHeight(Integer.parseInt(height)); // タブサイズの設定 String tabSize = properties.getProperty("tabSize"); textAreaProperties.setTabSize(Integer.parseInt(tabSize)); // フォントサイズの設定 String fontSize = properties.getProperty("fontSize"); textAreaProperties.setFontSize(Integer.parseInt(fontSize)); } catch (IOException e) { e.printStackTrace(); } return textAreaProperties; } /* * @see Logic#createMenuBar(javax.swing.JRootPane, * java.awt.event.ActionListener) */ @Override public void createMenuBar(JRootPane rootPane, ActionListener actionListener) { JMenuBar menuBar = new JMenuBar(); rootPane.setJMenuBar(menuBar); // ファイル(F) JMenu menuFile = new JMenu(Constants.MENU_FILE_LABEL); menuFile.setMnemonic(KeyEvent.VK_F); menuBar.add(menuFile); // ファイル(F)>新規(N) JMenuItem menuItemNew = setMenuItem(Constants.MenuItem.NEW, actionListener); menuFile.add(menuItemNew); // ファイル(F)>開く(O) JMenuItem menuItemOpen = setMenuItem(Constants.MenuItem.OPEN, actionListener); menuFile.add(menuItemOpen); // ファイル(F)>上書き保存(S) JMenuItem menuItemSave = setMenuItem(Constants.MenuItem.SAVE, actionListener); menuFile.add(menuItemSave); // ファイル(F)>名前を付けて保存(A) JMenuItem menuItemSaveAs = setMenuItem(Constants.MenuItem.SAVE_AS, actionListener); menuFile.add(menuItemSaveAs); // ヘルプ(H) JMenu menuHelp = new JMenu(Constants.MENU_HELP_LABEL); menuHelp.setMnemonic(KeyEvent.VK_H); menuBar.add(menuHelp); // ヘルプ(H)>バージョン情報(A) JMenuItem menuItemVersion = setMenuItem(Constants.MenuItem.VERSION, actionListener); menuHelp.add(menuItemVersion); } /* * @see Logic#setMenuItem(Constants.MenuItem, java.awt.event.ActionListener) */ @Override public JMenuItem setMenuItem(Constants.MenuItem item, ActionListener actionListener) { JMenuItem menuItem = new JMenuItem(item.getLabel()); menuItem.setMnemonic(item.getMnemonic()); menuItem.setActionCommand(item.toString()); menuItem.addActionListener(actionListener); return menuItem; } /* * @see Logic#createTextArea(TextAreaProperties, javax.swing.JFrame) */ @Override public JTextArea createTextArea(TextAreaProperties properties, JFrame frame) { JTextArea textArea = new JTextArea(); JScrollPane scrollPane = new JScrollPane(textArea); scrollPane.setPreferredSize(new Dimension(properties.getWidth(), properties.getHeight())); frame.getContentPane().add(scrollPane); textArea.setBackground(Color.BLACK); textArea.setForeground(Color.WHITE); textArea.setSelectionColor(Color.BLUE); textArea.setSelectedTextColor(Color.PINK); textArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, properties .getFontSize())); textArea.setTabSize(properties.getTabSize()); textArea.setCaretColor(Color.WHITE); textArea.setLineWrap(true); textArea.grabFocus(); return textArea; } /* * @see Logic#writeFile(java.io.File, java.lang.String) */ @Override public boolean writeFile(File file, String text) { try { FileWriter fileWriter = new FileWriter(file); fileWriter.write(text); fileWriter.close(); } catch (IOException e) { e.printStackTrace(); } return true; } }
ActionLogic.java
import javax.swing.JFileChooser; /** * アクションに関するロジックのインターフェースです * @author mock * */ public interface ActionLogic { /** * 新規ファイルを開きます * @param model テキストエディタに関するモデル * @return JFileChooser */ public JFileChooser newFile(TextEditorModel model); /** * ファイルを開きます * @param model テキストエディタに関するモデル */ public void openFile(TextEditorModel model); /** * ファイルに上書き保存します * @param model テキストエディタに関するモデル */ public void save(TextEditorModel model); /** * ファイルに名前を付けて保存します * @param model テキストエディタに関するモデル */ public void saveAs(TextEditorModel model); /** * バージョン情報ダイアログを表示します * @param model テキストエディタに関するモデル */ public void showVersionInfo(TextEditorModel model); }
ActionLogicImpl.java
import java.io.File; import java.io.FileReader; import java.io.IOException; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JTextArea; /** * アクションに関するロジックの実装クラスです * @author mock * */ public class ActionLogicImpl implements ActionLogic { /** logic */ public Logic logic = new LogicImpl(); /* * @see ActionLogic#newFile(TextEditorModel) */ @Override public JFileChooser newFile(TextEditorModel model) { JFrame frame = model.getFrame(); JTextArea textArea = model.getTextArea(); frame.setTitle(Constants.UNDIFINED_TITLE); textArea.setText(""); return new JFileChooser(); } /* * @see ActionLogic#openFile(TextEditorModel) */ @Override public void openFile(TextEditorModel model) { try { JFrame frame = model.getFrame(); JTextArea textArea = model.getTextArea(); JFileChooser fileChooser = model.getFileChooser(); if (fileChooser.showOpenDialog(frame) == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); FileReader fileReader = new FileReader(selectedFile); textArea.read(fileReader, null); fileReader.close(); frame.setTitle(fileChooser.getName(selectedFile)); } } catch (IOException e) { e.printStackTrace(); } } /* * @see ActionLogic#save(TextEditorModel) */ @Override public void save(TextEditorModel model) { JTextArea textArea = model.getTextArea(); JFileChooser fileChooser = model.getFileChooser(); // ファイルが既に開かれている場合 if (fileChooser.getSelectedFile() != null) { logic.writeFile(fileChooser.getSelectedFile(), textArea.getText()); return; } saveAs(model); } /* * @see ActionLogic#saveAs(TextEditorModel) */ @Override public void saveAs(TextEditorModel model) { JFrame frame = model.getFrame(); JTextArea textArea = model.getTextArea(); JFileChooser fileChooser = model.getFileChooser(); // ファイルダイアログ「保存」が選択された場合 if (fileChooser.showSaveDialog(frame) == JFileChooser.APPROVE_OPTION) { logic.writeFile(fileChooser.getSelectedFile(), textArea.getText()); File selectedFile = fileChooser.getSelectedFile(); frame.setTitle(fileChooser.getName(selectedFile)); } } /* * @see ActionLogic#showVersionInfo(TextEditorModel) */ @Override public void showVersionInfo(TextEditorModel model) { JFrame frame = model.getFrame(); JOptionPane.showMessageDialog(frame, Constants.VERSION, Constants.VERSION_TITLE, JOptionPane.INFORMATION_MESSAGE); } }