前回に続きまして、じっくり一晩考えてみてテキストエディタの機能を決めました。
メニュー
├── ファイル
│ ├── 新規作成
│ ├── 開く
│ ├── 上書き保存
│ ├── 名前を付けて保存
│ ├── 印刷
│ └── 閉じる
├── 編集
│ ├── 元に戻す
│ ├── やり直す
│ ├── すべて選択
│ ├── 切り取り
│ ├── コピー
│ ├── 貼り付け
│ ├── 検索
│ └── 置換
├── 表示
│ ├── 右端で折り返す
│ └── フォント
└── ヘルプ
└── バージョン情報
もう十分ですね。これくらいならなんとかなるでしょう。というかほとんどメモ帳と同じになってしまいました。
右クリックの機能は一旦保留にします。
問題なのは印刷ですね。作ったことないのでどう実装するのか分かりません。
あとフォントは設定が残るようにしないといけないので、設定ファイルがいりそうです。
まだまだ仕様がふわふわしてますけど、SceneBuilderを使ってとりあえず画面だけ作ってみます。

画面だけなら5分でできました!
もう完成したような気持ちになるけど、保存とかできませんからね。
青空文庫から「吾輩は猫である」をそのまま貼ってみますと、動作が結構重くなりました。
そして長い横スクロールもあってすごく使いにくいです。
TextAreaにwrapText="true" を付け加えると治りました。
そして長い横スクロールもあってすごく使いにくいです。
TextAreaにwrapText="true" を付け加えると治りました。
<TextArea prefHeight="200.0" prefWidth="200.0" wrapText="true" BorderPane.alignment="CENTER" />

この部分はメニューの[右端で折り返す]の機能なので、またコードを少しいじらないといけないですね。
ちなみに動作はさらに重たくなった感じしますが、どうしようもないですね。
次はメニューで何か選択された時に呼び出されるメソッドの名前を定義します。
メニュー
├── ファイル
│ ├── 新規作成・・・・・・private void newAction(ActionEvent event)
│ ├── 開く・・・・・・・・private void openAction(ActionEvent event)
│ ├── 上書き保存・・・・・private void saveAction(ActionEvent event)
│ ├── 名前を付けて保存・・private void saveAsAction(ActionEvent event)
│ ├── 印刷・・・・・・・・private void printAction(ActionEvent event)
│ └── 閉じる・・・・・・・private void closeAction(ActionEvent event)
├── 編集
│ ├── 元に戻す・・・・・・private void undoAction(ActionEvent event)
│ ├── やり直す・・・・・・private void redoAction(ActionEvent event)
│ ├── すべて選択・・・・・private void selectAllAction(ActionEvent event)
│ ├── 切り取り・・・・・・private void cutAction(ActionEvent event)
│ ├── コピー・・・・・・・private void copyAction(ActionEvent event)
│ ├── 貼り付け・・・・・・private void pasteAction(ActionEvent event)
│ ├── 検索・・・・・・・・private void findAction(ActionEvent event)
│ └── 置換・・・・・・・・private void replaceAction(ActionEvent event)
├── 表示
│ ├── 右端で折り返す・・・private void wrapAction(ActionEvent event)
│ └── フォント・・・・・・private void fontAction(ActionEvent event)
└── ヘルプ
└── バージョン情報・・・private void aboutAction(ActionEvent event)
こんな感じでしょうか。
あと下の方に、行数とか処理内容とか表示されたら良さそうなので、Labelも画面に追加しました。

例えばフォントを選択すると下に「フォント」と出てきます。
「右端で折り返す」はデフォルトがtrueのCheckMenuItemにしてあります。
「右端で折り返す」はデフォルトがtrueのCheckMenuItemにしてあります。
【FXMLDocumentController.java】
public class FXMLDocumentController implements Initializable {
@FXML
private Label bottomLabel;
@FXML
private void newAction(ActionEvent event) {
bottomLabel.setText("新規作成");
}
・
・
・
}
@FXML
private Label bottomLabel;
@FXML
private void newAction(ActionEvent event) {
bottomLabel.setText("新規作成");
}
・
・
・
}
【FXMLDocument.fxml】
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="textediter01.FXMLDocumentController">
<top>
<MenuBar BorderPane.alignment="CENTER">
<menus>
<Menu mnemonicParsing="false" text="ファイル">
<items>
<MenuItem mnemonicParsing="false" onAction="#newAction" text="新規作成" />
<MenuItem mnemonicParsing="false" onAction="#openAction" text="開く" />
<MenuItem mnemonicParsing="false" onAction="#saveAction" text="上書き保存" />
<MenuItem mnemonicParsing="false" onAction="#saveAsAction" text="名前を付けて保存" />
<MenuItem mnemonicParsing="false" onAction="#printAction" text="印刷" />
<MenuItem mnemonicParsing="false" onAction="#closeAction" text="閉じる" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="編集">
<items>
<MenuItem mnemonicParsing="false" onAction="#undoAction" text="元に戻す" />
<MenuItem mnemonicParsing="false" onAction="#redoAction" text="やり直す" />
<MenuItem mnemonicParsing="false" onAction="#selectAllAction" text="すべて選択" />
<MenuItem mnemonicParsing="false" onAction="#cutAction" text="切り取り" />
<MenuItem mnemonicParsing="false" onAction="#copyAction" text="コピー" />
<MenuItem mnemonicParsing="false" onAction="#pasteAction" text="貼り付け" />
<MenuItem mnemonicParsing="false" onAction="#findAction" text="検索" />
<MenuItem mnemonicParsing="false" onAction="#replaceAction" text="置換" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="表示">
<items>
<CheckMenuItem mnemonicParsing="false" onAction="#wrapAction" selected="true" text="右端で折り返す" />
<MenuItem mnemonicParsing="false" onAction="#fontAction" text="フォント" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="ヘルプ">
<items>
<MenuItem mnemonicParsing="false" onAction="#aboutAction" text="バージョン情報" />
</items>
</Menu>
</menus>
</MenuBar>
</top>
<center>
<TextArea prefHeight="200.0" prefWidth="200.0" wrapText="false" BorderPane.alignment="CENTER" />
</center>
<bottom>
<Label fx:id="bottomLabel" BorderPane.alignment="CENTER_LEFT" />
</bottom>
</BorderPane>
次回に続く。。。かも
0 件のコメント:
コメントを投稿