Skip to content

Latest commit

 

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

DrawSoft


Java Swing を使用した、機能豊富なペイントアプリケーションです。Microsoft Word 風のリボン UI(タブ式)を採用しており、直感的に様々な図形を描画できます。

主な機能

描画モード

  • 選択モード - 描画済みの図形を選択・移動・リサイズ
  • 丸(ドット) - 固定サイズの点を描画
  • 円 - 中心から外側へドラッグして円を描画
  • 四角形 - 対角線でドラッグして四角形を描画
  • 線 - 2点を結ぶ直線を描画
  • 楕円 - 楕円形を描画
  • フリーハンド - マウスで自由に描画
  • 消しゴム - 領域内の図形を削除
  • 折れ線 - クリックで複数の点を結んで線を描画

UI タブ

ファイルタブ

  • 開く - 保存済みの図形ファイルを読み込み
  • 保存 - 図形データを .dat ファイルに保存
  • PNG出力 - キャンバスを PNG 画像として出力
  • 保存サイズ設定 - 出力時の幅・高さをピクセル単位で指定

オプションタブ

  • 色選択 - カラーピッカーで描画色を指定
  • 線幅 - スライダーで線の太さを調整(0.5~50.0px)
  • 塗り - チェックボックスで図形を塗りつぶす/枠線のみ

編集タブ

  • 全体消去 - キャンバスのすべての図形を削除
  • Undo - 最後の操作を取り消す
  • Redo - 取り消した操作をやり直す
  • 終了 - アプリケーションを終了

使い方

実行方法


パターン1 Javaファイルで起動

  1. ninthをダウンロードをする。
  2. vscodeなどでninthを開くテキストエディタを開く
# Maven でコンパイル
mvn clean compile

# アプリケーションを実行(ファイル名は省略可能)
mvn exec:java -Dexec.mainClass="ninth.Paint" -Dexec.args="filename.dat"

パターン2

  1. dowloadをダウンロードをする。
  2. .exeファイルを開く

基本的な操作フロー

  1. 図形を描画する

    • モードタブで「丸」「円」など描画モードを選択
    • キャンバス上でマウスをドラッグして図形を描画
    • マウスをリリースすると図形が確定
  2. 図形のスタイルを変更

    • オプションタブで「色選択」ボタンをクリックして色を選択
    • 「線幅」で線の太さを調整
    • 「塗り」にチェックして塗りつぶしを有効化
  3. 図形を選択・編集

    • モードタブで「選択」を選択
    • キャンバス上で図形をクリックして選択
    • ドラッグで移動、角をドラッグでリサイズ可能
  4. ファイルに保存

    • ファイルタブの「保存」で図形データを保存
    • ファイルタブの「PNG出力」でキャンバスを画像化
  5. ファイルを読み込み

    • ファイルタブの「開く」で保存済みのファイルを読み込み

プロジェクト構成

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() メソッドでクリック判定を実装します。

ファイル形式

.dat ファイル

図形データを Java シリアライゼーションで保存しています。

  • 描画順序を保持
  • 色、線幅、塗りつぶし設定を保存
  • 再開時に完全に復元可能

.png ファイル

キャンバスの内容を PNG 画像として出力します。

  • 指定したサイズで出力可能
  • 背景は白色

カスタマイズ

新しい図形を追加する

  1. Figure クラスを継承した新しいクラスを作成
  2. paint() メソッドで描画ロジックを実装
  3. contains() メソッドでヒットテストを実装
  4. Paint.java のモードタブにラジオボタンを追加
  5. 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+

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages