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を用いたシンプルなエディタアプリの作成方法を学びました。基本的なUI設計やアーキテクチャを理解し、個人開発における可能性を広げるための第一歩を踏み出すことができました。サラリーマンエンジニアとしての未来に不安を感じているなら、JavaFXを活用した個人開発のスキルを身につけることが、今後のキャリアを安定させる鍵となります。

終わりにひとこと

IT業界は急速に変化しています。これまで企業主導で進んできたシステム開発が、今後は個人の手による開発が主流になる流れを見せています。特に、サラリーマンエンジニアとして企業に勤め続けることが、もはや安定した選択肢とは言えません。今後、サラリーマンエンジニアが参画するのは主にJavaサーブレットやJSPを使ったシステム開発であり、これらの分野はますます外国勢、特に低価格で開発ができる短金の安い外国勢と激しい価格競争に巻き込まれ、搾取される側に回るのは避けられません。

この競争環境において、サラリーマンエンジニアとして生き残るには、従来のような企業依存型の働き方ではなく、個人開発スキルが不可欠になります。特に、JavaFXは、個人開発者としてのスキルを活かしやすい技術のひとつです。個人開発の世界では、企業に頼らずに自分の力で収益を上げていける可能性が広がっています。

企業に依存するサラリーマンエンジニアとしての道は、今後ますます厳しくなる一方で、個人開発に切り替えることで、自分の自由な時間や収益源を確保できる道が開けます。このエディタアプリの開発を通じて、最低限の機能のみを実装したJavaFXベースの個人開発スキルを身に付ければ、将来的にはより高度な個人開発やフリーランスエンジニアとして活躍できる土台を築けるでしょう。

サラリーマンエンジニアが価格競争の波に飲み込まれる前に、個人開発に必要な技術を学んでおくことは、今後の安定したキャリアにおいて避けて通れない道です。フリーランスや個人開発者としての自由を手に入れるために、JavaFXを活用したアプリケーション開発を学び、新しい時代に適応するための一歩を踏み出しましょう。

よく読まれている記事

1

IT入門シリーズ 🟢 STEP 1: ITの基礎を知る(ITとは何か?)├─【IT入門】ITとは?仕組みや活用方法をわかりやすく解説├─【IT入門】インターネットとは?仕組み・使い方を ...

2

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

3

Shellスクリプト基礎知識(全13記事+2) ├─【Shellの基礎知識】Shellスクリプト入門|初心者が押さえる基本├─【Shellの基礎知識】変数と特殊変数の使い方|初心者向け解説├─【She ...

-Java の基礎知識