Javaの基礎知識(実践編)

【Javaの基礎知識】JavaFXで作るシンプルなエディタアプリ|保存・開く・編集

JavaFXを使って、シンプルな「エディタ」を作成する方法を解説します。本記事では、基本的なUI設計からイベント処理の実装まで、実践的なステップを詳しく説明します。初心者でも理解しやすいように、コード付きで解説しているので、ぜひ参考にしてください。

エディタアプリの概要

本アプリは、開発者やライターを対象としたシンプルなエディタです。シンプルな操作性を保ちつつ、フォントやテーマ機能を提供します。

本アプリの目的

本アプリは、サンプルとして作成したエディタであるため、最低限の機能のみ実装することとします。基本的なテキスト編集機能にフォーカスしています。

ユーザーごとのカスタマイズや拡張機能については、今後のアップデートにて追加される可能性がありますが、現時点では最小限の機能を提供しています。

エディタとして実現する機能一覧

本アプリで提供する主要な機能を以下の表にまとめます。これらの機能により、快適なテキスト編集環境を実現します。

機能概要
テキスト入力・編集機能基本的なテキストの入力や編集が可能
ファイルの読み込み・保存外部ファイルの読み込みおよび編集後の保存
フォント・テーマの変更フォントの種類やサイズ、エディタのテーマを変更可能
自動保存機能一定間隔で自動的に編集中のファイルを保存

操作性とUIの要件

  • ダークモード対応
  • リサイズ可能なレイアウト
  • ステータスバーの表示(テーマ変更やフォントサイズ指定など)

エディタアプリの全体設計書の構成と設計要素

本アプリは、シンプルなテキスト編集機能だけを備えた最小限のサンプルエディタです。拡張性やメンテナンス性は考慮していないため、機能追加や修正は予定していません。

設計は極力シンプルにまとめ、最小限のUI構成と機能のみを実装しています。アーキテクチャやデータ管理については特にこだわらず、基本的な動作のみを実現しています。

このアプリは、ユーザー設定やシンタックスハイライトなどの高度な機能には対応しておらず、シンプルなテキスト編集ができるだけのものです。 

設計方針

具体的には、MVC(Model-View-Controller)アーキテクチャを採用し、UI(View)、制御(Controller)、データ管理(Model)の役割を明確に分離することで、コードの見通しを良くし、機能の追加や修正を容易にします。また、ユーザーの好みに応じた設定変更を可能にするため、カスタマイズしやすい設定管理を組み込み、フォントやテーマの変更、ショートカットキーのカスタマイズなどを柔軟に対応できるようにします。

これらの設計方針により、開発のしやすさと拡張性を両立させ、実用的かつ持続的に改善可能なエディタアプリを構築します。

設計方針

  1. シンプルかつ拡張性の高い設計
  2. MVC(Model-View-Controller)アーキテクチャ
  3. カスタマイズしやすい設定管理

アプリの主要コンポーネント

エディタアプリの開発においては、機能の拡張や保守性を考慮し、アーキテクチャを適切に設計することが重要です。本アプリでは、View(UI)、Controller(制御)、Model(データ管理)の3つの主要コンポーネントに分割し、それぞれの役割を明確にします。

View(UI) では、ユーザーが直感的に操作できるインターフェースを構築し、エディタエリア、ステータスバーなどの主要なUI要素を配置します。Controller(制御部) では、ユーザーの操作を受け取り、ファイルの読み書きなどの処理を担います。Model(データ管理) では、現在開いているファイルの情報や、ユーザー設定の保存・読み込みを管理します。

このように各コンポーネントを明確に分割することで、コードの保守性を高め、機能の追加や改修をスムーズに行える設計を実現します。

View(UI)

  • メニューバー
  • エディタエリア(テキスト入力部分)
  • ステータスバー

Controller(制御部)

  • ユーザー操作の管理(ボタンやショートカット)
  • ファイルの読み書き制御

Model(データ管理)

  • 現在開いているファイルの情報
  • 設定データの保存・読み込み

ファイル管理とユーザー設定

エディタアプリにおいて、ファイルの読み込みや保存は最も基本的でありながら、柔軟な設計が求められる重要な機能の一つです。ユーザーがスムーズにファイルを操作できるよう、本アプリでは直感的なUIと効率的なファイル入出力処理を両立させた設計を行います。

具体的には、ファイルの選択や保存を簡単に行えるように FileChooser を利用したファイルダイアログ を実装し、ユーザーが自由にファイルを開閉できるようにします。また、ファイルの読み書き処理には BufferedWriter / BufferedReader を使用し、大容量のテキストファイルでも高速に処理できる仕組みを採用します。

  • ファイル選択ダイアログの実装
  • FileChooser を使ったファイルの入出力
  • BufferedWriter / BufferedReader<によるファイル管理

エディタアプリをより使いやすくするためには、ユーザーごとにカスタマイズ可能な設定機能が不可欠です。本アプリでは、フォントの種類やサイズ、テーマ(ダークモード対応)に対応する仕組みを設計します。

エディタアプリの使用する全クラス一覧

本アプリでは、各クラスを役割ごとに分割し、必要に応じて実行構成の設定を適用する設計を採用しています。以下の表では、各クラスの役割と実行構成の設定の有無を示します。なお、実行構成の設定が「あり」となるのは、main() メソッドを持つクラスのみです。

クラス名役割実行構成の設定
TextEditorJavaFXアプリケーションのエントリーポイントあり
EditorViewエディタのメインUI(レイアウト管理)なし
AutoSaveManager定期的な自動保存を制御なし
MenuControllerメニューバーの操作制御なし
FileManagerファイルの読み込み・保存処理なし
EditorControllerエディタのUI操作を制御(フォント、テーマなど)なし
EditorSettingsエディタの設定(フォント、テーマ)の保存と管理なし

エディタアプリの実装手順

本アプリの実装手順を順を追って説明します。各機能を段階的に構築しながら、エディタとして最低限必要な機能を追加していきます。まずはメインアプリの作成から始め、UIの構築、テキスト編集機能、ファイル管理、設定管理などを実装していきます。開発環境のセットアップについては、前回の記事を参照してください。

開発環境のセットアップに関しては、下記の記事を参照してください。

メインアプリの実装

エディタアプリの起点となるメインアプリを実装します。JavaFXの Application クラスを継承し、start() メソッド内でウィンドウの初期設定を行います。このクラスが全体のエントリーポイントとなり、UIのロードや制御の基盤を担います。

TextEditor.java の実装

JavaFXアプリのエントリーポイントとなるMainApp.javaの実装を行います。

UI(エディタ画面)の構築

エディタアプリのユーザーインターフェースを作成します。直感的な操作性を考慮し、シンプルかつ拡張性の高いレイアウトを設計します。メインの編集エリアに加え、メニューバーやツールバーを配置し、快適な編集環境を提供します。

EditorView.java の実装

エディタのメインUIを構築し、レイアウトを設定します。JavaFXのレイアウトマネージャーを活用し、メインウィンドウの構成を定義します。

TextEditor.javaの修正

EditorView.java の実装を反映させるために「MainApp.java」へ下記コードを追加します。

// EditorViewのインスタンスを作成し、ウィンドウにセット
new EditorView(primaryStage);

エディタのサイズが広がりました。

メニューバーの作成

エディタの操作性を向上させるために、メニューバーを実装します。メニューバーでは、ファイルの開閉や保存などの基本操作を提供ます。

MenuController.java の実装

エディタアプリに「メニューバー」を追加し、基本的な操作(開く・保存など)を管理できるようにします。

TextEditor.javaの修正

MenuController.java及び、ToolbarController.java の実装を反映させるために「TextEditor.java」へ下記コードを追加します。

// メニューバーをトップに追加
MenuController menuController = new MenuController();
root.setTop(menuController.getMenuBar());

// ツールバーをメニューバーの下に配置
ToolbarController toolbarController = new ToolbarController();
root.setCenter(toolbarController.getToolBar());

メニューバーが表示されます。

ファイル管理の実装

エディタアプリでは、作成したテキストをファイルに保存し、後で再編集できるようにする必要があります。ここでは、ファイルの読み込み・保存処理と、作業内容を定期的に自動保存する機能を実装します。

FileManager.java の実装

ファイルの読み込みと保存を管理するFileManager.javaを実装します。このクラスは、ユーザーが手動でファイルを開いたり、編集内容を保存できるようにします。

AutoSaveManager.javaの実装

エディタの編集内容を定期的に保存するため、自動保存機能を追加します。一定時間ごとに現在のテキストをバックアップファイルとして保存し、万が一のデータ消失を防ぎます。

TextEditor.javaの修正

FileManager.java(開く・保存)と AutoSaveManager.java(自動保存)をTextEditor.javaへ組み込みます

任意の文字を入力してメニューから保存。
手動でファイルをプロジェクト内へ保存
変更があった場合、5秒ごとに自動で保存

フォント・テーマの変更機能の実装

エディタのフォントやテーマを変更することで、ユーザーがより快適に作業できる環境を提供できます。このセクションでは、フォントの種類やサイズの変更、ダークテーマ・ライトテーマの切り替え方法について解説します。

エディタのフォントを変更することで、ユーザーが見やすい環境をカスタマイズできます。特に、プログラミング向けのエディタでは、可読性の高いフォントの選択が重要です。

クラスの配置場所

この辺りからクラスの数が増え始めるので現在までのクラス配置イメージを記載しておきます。

フォントの種類とサイズ変更機能の実装

JavaFXでは、 TextArea のフォントを変更することで、ユーザーが好みのフォントやサイズを設定できます。以下のコードを適用することで、フォントをリアルタイムに変更できます。

import javafx.scene.text.Font;
textArea.setFont(Font.font("Courier New", 14));

エディタのテーマ編集仕様

エディタのテーマを下記へまとめます。下記のテーブルは、ダークテーマとライトテーマの色分けに関する情報を簡潔に表示するためのものです。

コンポーネント背景色文字色備考
ダークテーマ(全体背景)#333333whiteダークグレー背景、白文字
テキストエリア#222222white背景暗いグレー、白文字
選択範囲#555555white背景色、選択テキストの色
プレースホルダー文字#888888noneプレースホルダーの文字色
ComboBox, Spinner#444444white背景色、テキストの色(アイテム)
ComboBoxリストアイテム#444444whiteリストアイテム背景、文字色
Spinnerテキストフィールド#555555whiteスピナーの文字色
ボタン#555555whiteボタン背景、白文字
設定パネル#333333white設定パネル背景、白文字
ダークテーマの詳細設定nonewhite各コンポーネントの文字色を白に設定
ライトテーマ(全体背景)#ffffff#000000白背景、黒文字
テキストエリア#ffffff#000000白背景、黒文字
選択範囲#cccccc#000000選択範囲の背景色、選択テキストの色
プレースホルダー文字#666666noneプレースホルダー文字の色
ComboBox, Spinner#ffffff#000000背景色、テキストの色
ComboBoxリストアイテム#ffffff#000000リストアイテム背景、文字色
Spinnerテキストフィールド#ffffff#000000スピナーの文字色
ボタン#eeeeee#000000ボタン背景、黒文字
テキストエリア(文字色)#ffffff#000000黒文字
ComboBoxアイテム(マウスオーバー)#4CAF50whiteアイテムにマウスオーバーしたとき
Spinnerアイテム(マウスオーバー)#4CAF50whiteスピナーにマウスオーバーしたとき
ダークテーマ時のSpinner#555555white背景色を暗く、文字色を白に
ダークテーマ時のSpinnerボタン#555555whiteボタン背景色、ボタン内の文字色を白に

ダークテーマとライトテーマの切り替え

ダークテーマやライトテーマを切り替えることで、目の負担を軽減し、作業環境を改善できます。JavaFXでは、CSSのスタイルを変更することで簡単にテーマを切り替えられます。

以下のコードを適用することで、ボタンを押すとテーマが切り替わるようになります。

root.getStylesheets().add(getClass().getResource("dark-theme.css").toExternalForm());

ダークテーマのスタイルは、以下のCSSで設定できます。

.root {
  -fx-background-color: #333;
  -fx-text-fill: #fff;
}
.text-area {
  -fx-background-color: #222;
  -fx-text-fill: #ddd;
}

dark-theme.cssの実装

本プロジェクトのフォルダ構成は以下の通りです。
CSSファイルは src/main/resources/ に保存されています。

EditorController.javaの実装

EditorSettings.javaの実装

TextEditor.javaの修正

エディタ(ライトモード)
エディタ(ダークモード)

まとめ

この記事では、JavaFXを使ったシンプルなエディタ(エディタ)アプリの作成手順を解説しました。JavaFXの基本構造、UI設計、ファイル管理、テーマ切り替え、フォント設定、自動保存など実用的な機能を組み合わせながら、個人開発の練習素材として活用できる形で整理しています。

このアプリを実際に作ることで、Javaのオブジェクト指向やMVC設計、イベントドリブンの考え方、ファイル操作の基礎を実践的に学べます。作りながら理解することで知識が定着しやすく、今後の個人開発の基礎力向上に直結します。

将来フリーランスや副業で収入を得たいエンジニア志望者にとって、こうした小規模ツールを作れるスキルは大きな武器になります。JavaFXで作ったエディタは、単なる練習で終わらず、自分専用の便利ツールとして日常的に使える資産にもなります。

もし今の環境でキャリアに不安があるなら、会社依存から個人依存へ切り替える準備を少しずつ始める時期です。JavaFXを活用した個人開発で、小さな「稼げる仕組み」を自分の手で作る力を身につけていきましょう。

このエディタアプリでJavaFXを学んだら、次はSpring Bootを使ったWebアプリ開発にも挑戦してみましょう。Javaエンジニアとして副業や個人開発の幅を広げるために、Web開発スキルの習得は避けて通れません。

以下の記事で、Spring Bootの環境構築からプロジェクトのセットアップ方法までわかりやすく解説していますので、続けて学習してスキルアップに役立ててください。

👉 【Javaの基礎知識】Spring Boot環境構築&プロジェクトセットアップ完全ガイド!

本サイトにて記載のすべてのスクリプト利用により発生した利用者の損害全てに対し、いかなる責任をも負わないものとし、損害賠償をする一切の義務はないものとします。また、この記事は、実際の案件対応を通じて得た知見をもとに筆者が作成したものであり、全コードと解説は著者本人による設計・検証結果に基づいています。

よく読まれている記事

1

「シェル」と「シェルスクリプト」という言葉を聞いたことがありますか?どちらもLinuxやMacのターミナルで使われるものですが、それぞれの役割や使い方には違いがあります。 本記事では、「シェル」と「シ ...

2

「私たちが日々利用しているスマートフォンやインターネット、そしてスーパーコンピュータやクラウドサービス――これらの多くがLinuxの力で動いていることをご存じですか? 無料で使えるだけでなく、高い柔軟 ...

3

この記事は、Linuxについて勉強している初心者の方向けに「Shellスクリプト」について解説します。最後まで読んで頂けましたら、Shellスクリプトはどのような役割を担っているのか?を理解出来るよう ...

-Javaの基礎知識(実践編)