Java Swing を使用した、機能豊富なペイントアプリケーションです。Microsoft Word 風のリボン UI(タブ式)を採用しており、直感的に様々な図形を描画できます。
- 選択モード - 描画済みの図形を選択・移動・リサイズ
- 丸(ドット) - 固定サイズの点を描画
- 円 - 中心から外側へドラッグして円を描画
- 四角形 - 対角線でドラッグして四角形を描画
- 線 - 2点を結ぶ直線を描画
- 楕円 - 楕円形を描画
- フリーハンド - マウスで自由に描画
- 消しゴム - 領域内の図形を削除
- 折れ線 - クリックで複数の点を結んで線を描画
- 開く - 保存済みの図形ファイルを読み込み
- 保存 - 図形データを
.datファイルに保存 - PNG出力 - キャンバスを PNG 画像として出力
- 保存サイズ設定 - 出力時の幅・高さをピクセル単位で指定
- 色選択 - カラーピッカーで描画色を指定
- 線幅 - スライダーで線の太さを調整(0.5~50.0px)
- 塗り - チェックボックスで図形を塗りつぶす/枠線のみ
- 全体消去 - キャンバスのすべての図形を削除
- Undo - 最後の操作を取り消す
- Redo - 取り消した操作をやり直す
- 終了 - アプリケーションを終了
パターン1 Javaファイルで起動
- ninthをダウンロードをする。
- vscodeなどでninthを開くテキストエディタを開く
# Maven でコンパイル
mvn clean compile
# アプリケーションを実行(ファイル名は省略可能)
mvn exec:java -Dexec.mainClass="ninth.Paint" -Dexec.args="filename.dat"パターン2
- dowloadをダウンロードをする。
- .exeファイルを開く
-
図形を描画する
- モードタブで「丸」「円」など描画モードを選択
- キャンバス上でマウスをドラッグして図形を描画
- マウスをリリースすると図形が確定
-
図形のスタイルを変更
- オプションタブで「色選択」ボタンをクリックして色を選択
- 「線幅」で線の太さを調整
- 「塗り」にチェックして塗りつぶしを有効化
-
図形を選択・編集
- モードタブで「選択」を選択
- キャンバス上で図形をクリックして選択
- ドラッグで移動、角をドラッグでリサイズ可能
-
ファイルに保存
- ファイルタブの「保存」で図形データを保存
- ファイルタブの「PNG出力」でキャンバスを画像化
-
ファイルを読み込み
- ファイルタブの「開く」で保存済みのファイルを読み込み
src/main/java/DrawSoft/ninth
├── Paint.java # メインウィンドウ、UI構築、イベント管理
├── PaintCanvas.java # 描画キャンバス、マウスイベント処理
├── Figure.java # 図形の抽象基底クラス
├── Coord.java # 座標情報を管理
├── Dot.java # 点(ドット)の実装
├── Circle.java # 円の実装
├── Rect.java # 四角形の実装
├── Line.java # 線の実装
├── Ellipse.java # 楕円の実装
├── Freehand.java # フリーハンド描画の実装
└── Polyline.java # 折れ線の実装
このアプリケーションは以下のパターンを採用しています:
- Abstract Factory Pattern -
Figure抽象クラスを基底に各図形を実装 - Observer Pattern - Swing のイベントリスナーでユーザー操作を監視
- Model-View -
PaintCanvasがモデル(図形リスト)とビュー(描画)を担当
Figure(抽象基底クラス)
public abstract class Figure extends Coord {
double w, h; // 図形のサイズ
Color color; // 描画色
double strokeWidth; // 線幅
boolean filled; // 塗りつぶしフラグ
abstract void paint(Graphics2D g); // 描画メソッド
abstract boolean contains(double x, double y); // ヒットテスト
}すべての図形クラスは Figure を継承し、paint() メソッドで描画ロジック、contains() メソッドでクリック判定を実装します。
図形データを Java シリアライゼーションで保存しています。
- 描画順序を保持
- 色、線幅、塗りつぶし設定を保存
- 再開時に完全に復元可能
キャンバスの内容を PNG 画像として出力します。
- 指定したサイズで出力可能
- 背景は白色
Figureクラスを継承した新しいクラスを作成paint()メソッドで描画ロジックを実装contains()メソッドでヒットテストを実装Paint.javaのモードタブにラジオボタンを追加PaintCanvas.javaのmousePressed()で新しい図形を生成
// 例:三角形の実装
public class Triangle extends Figure {
@Override
public void paint(Graphics2D g) {
// 三角形の描画処理
}
@Override
public boolean contains(double px, double py) {
// 三角形内のポイント判定
return ...;
}
}- Java 21
- Swing - GUI フレームワーク
- AWT - グラフィックス描画
- Maven - ビルドツール
- JDK 21 - Java Development Kit
Apache License 2.0
開発環境: Windows 10/11, JDK 21+