![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
swingで画像を読み込み、編集して保存する簡単なお絵かきソフトを作っています。
恥ずかしながら、とても初歩的なところ(設計段階)でつまづいてしまったので質問させていただきます。
構造としては、大本のJFrameがあり、左側にはコントローラーとして動作するJPanel、右側にはキャンバスとして動作するJPanelを配置します。
コントローラーJPanel内にはさらに線を引くボタン、円を描くボタン、スタンプを配置するボタンなどがあります。
キャンバスJPanel内には画像を読み込むためのJLabel、描画された線、円、スタンプなどが配置される描画JPanelなどがあります。
いま、コントローラーに「配置されている全スタンプの大きさ2倍」のボタンを作ろうと思っています(このボタンの必要性については考えないでください(笑))。
スタンプのクラスにはすでに自身の大きさを2倍にするメソッドを用意しました。
あとはボタンがクリックされたときに全スタンプに対して大きさ2倍メソッドを呼べばこれが実装できると思いまいた。
しかし、そのメソッドを呼ぶためには、コントローラーからスタンプへアクセスする必要がありますよね。
スタンプのインスタンス群を格納している配列は描画JPanelが持っているため、そこまで到達しなければなりません。
つまり、大きさ2倍ボタン→コントローラーJPanel→メインJFrame→キャンバスJPanel→描画JPanelと辿らなければスタンプへアクセスできません。
各インスタンスに親と子への参照を持たせて、getChild()とかgetParent()のようなメソッドで参照を得るようにすれば辿れなくはないと思うのですが
getParent().getParent().getChild().getChild().スタンプ群配列 のような感じになって明らかに変ですし、これがプログラム設計上好ましくないであろうことはわかります。
このようなことをしなくてもうまくいく方法はないものでしょうか。
どうかお力添えください。よろしくお願いします。
No.2ベストアンサー
- 回答日時:
実装はいろいろ考えられるからなぁ....
理屈だけからいえば, 描画パネルを observer とする observer/observable パターンを使ってもいいわけだし.
No.1
- 回答日時:
なんで「大きさ2倍ボタン→コントローラーJPanel→メインJFrame→キャンバスJPanel→描画JPanelと辿らなければ」ならないのかさっぱりわからん....
例えばだけど, 「大きさ2倍ボタン」のハンドラを「メインJFrame」の内部クラスにしておけば簡単にならないかな.
なるほど。
イベントハンドラは呼び出し元のオブジェクトのクラスに書かなければならないものだと思いこんでいました。
確かにメインJFrameの内部クラスとしておけば、入れ子を遡る必要はなくなりますね。
ありがとうございます。
メインJFrame→キャンバスJPanel→描画JPanel と辿る必要はありますが、これは仕方のないものなのでしょうか。
また、オブジェクト指向設計の観点からはこのような実装が最善のものなのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- LINE line スタンプ の作り方 1 2023/02/14 06:03
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- その他(パソコン・周辺機器) ボタン数の多いゲームコントローラー、ゲームパッドを探しています 2 2023/08/17 16:29
- その他(パソコン・スマホ・電化製品) PS4のコントローラーについてです 1 2022/05/29 16:05
- ホームページ作成・プログラミング グリッドレイアウトHTMLとCSS 1 2023/02/22 02:36
- 据え置き型ゲーム機 【 Xbox Series X|S 】BIOHAZARD 5、ローカル協力プレイ (2-2) 1 2023/05/01 15:36
- 据え置き型ゲーム機 Switchで太鼓の達人をやってるのですが、プロコンが使いにくくて仕方がないです。何が使いにくいって 1 2023/07/01 10:46
- その他(趣味・アウトドア・車) Arudino nanoが正常に動作しない原因 1 2022/10/30 18:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# リストビューの特定のセルの...
-
VS Treeview のデザイン変更
-
SwingとEDT(イベントディスパッ...
-
画面のちらつきの原因が知りた...
-
VB.NET フォーム上に描いたグ...
-
株価チャートソフトを作るのに
-
VB.NETのSendMessageを教えてく...
-
iアプリでポップアップメニュー...
-
「タイプ初期化子が例外をスロ...
-
エクセルVBAで、条件に一致する...
-
変数名の付け方
-
オブジェクト参照がオブジェク...
-
java eclipse 型に解決できません
-
インスタンス参照でアクセスで...
-
VB.NET getとsetの概念がわかり...
-
C# インスタンスの破棄
-
final修飾子を使っているのに、...
-
生成したインスタンスを削除す...
-
「インスタンス」の意味をわか...
-
Java初級 引数に適用できません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NET フォーム上に描いたグ...
-
JAVAでの背景画像表示
-
VB.NETのSendMessageを教えてく...
-
C# DataGridView のCellPaintin...
-
Labelコントロールの背景をグラ...
-
C# リストビューの特定のセルの...
-
画面のちらつきの原因が知りた...
-
canvasで表示されてる画像を1...
-
重なった要素上でのイベントで...
-
SwingとEDT(イベントディスパッ...
-
描画してもウィンドウをリサイ...
-
株価チャートソフトを作るのに
-
Javaで文字の角度を変えて表示...
-
アクセスで他アプリから復帰し...
-
Androidで画像の中で指定した範...
-
JavaでのDirectXの使用
-
Java、jPanelに描画する
-
描画処理が実行されない
-
VS Treeview のデザイン変更
-
C# テキストボックスについて
おすすめ情報