「テキストエディタソースver1.2」の編集履歴(バックアップ)一覧はこちら
「テキストエディタソースver1.2」(2009/03/15 (日) 04:13:38) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*テキストエディタソースver1.2
#contents()
**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);
}
}
*テキストエディタソースver1.2
#contents()
**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);
}
}
表示オプション
横に並べて表示:
変化行の前後のみ表示: