回答編集履歴

2

誤記訂正

2017/05/09 04:11

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -20,7 +20,7 @@
20
20
  追記:上記の回答とは別の話になりますが、修正後コードを動かしてみて気づいた点をいくつか指摘しておきます。
21
21
 
22
22
  - 書いた絵の情報を記録していない
23
- 一応絵は描けますが、ウィンドウを最小化してから再表示してみてください。せっかく書いた絵が消えていることに気づくと思います。本来は描画した絵の内容BufferedImageなどに記録しておかないといけなくて、paintComponentではBufferedImageの内容をdrawImageするだけというのが本来のお絵かきソフトの作りになると思います。
23
+ 一応絵は描けますが、ウィンドウを最小化してから再表示してみてください。せっかく書いた絵が消えていることに気づくと思います。描画した絵の内容BufferedImageなどに記録してお、paintComponentではBufferedImageの内容をdrawImageするだけというのが本来のお絵かきソフトの作りになると思います。
24
24
 
25
25
  - mouseEntered/mouseExited
26
26
  わかりやすさのために座標の設定を行っているとは思うのですが、実際にはこのイベントの処理は(ドラッグによる線の描画に関しては)不要です。

1

追記

2017/05/09 04:11

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -13,4 +13,17 @@
13
13
  - newMouseX, newMouseY
14
14
  新たにドラッグを検出した際のマウス位置。mousePressedイベントの際にはlastMouseX, lastMouseYと同じ値にしておくとよいでしょう。
15
15
 
16
- paintComponentではlastMouseX/YとnewMouseX/Yの座標が異なっていた場合のみlastMouseX/Y->newMouseX/Yに向かって円を描画し、描画し終わったらlastMouseX/Yの値をnewMouseX/Yと同じ値に書き換えるというようにしておけばよいでしょう。
16
+ paintComponentではlastMouseX/YとnewMouseX/Yの座標が異なっていた場合のみlastMouseX/Y->newMouseX/Yに向かって円を描画し、描画し終わったらlastMouseX/Yの値をnewMouseX/Yと同じ値に書き換えるというようにしておけばよいでしょう。
17
+
18
+ ---
19
+
20
+ 追記:上記の回答とは別の話になりますが、修正後コードを動かしてみて気づいた点をいくつか指摘しておきます。
21
+
22
+ - 書いた絵の情報を記録していない
23
+ 一応絵は描けますが、ウィンドウを最小化してから再表示してみてください。せっかく書いた絵が消えていることに気づくと思います。本来は描画した絵の内容をBufferedImageなどに記録しておかないといけなくて、paintComponentではBufferedImageの内容をdrawImageするだけというのが本来のお絵かきソフトの作りになると思います。
24
+
25
+ - mouseEntered/mouseExited
26
+ わかりやすさのために座標の設定を行っているとは思うのですが、実際にはこのイベントの処理は(ドラッグによる線の描画に関しては)不要です。
27
+
28
+ - レイアウトのしかた
29
+ setBounds/setSizeで直接大きさを指定することとLayoutManager(BorderLayout)を併用しているのは画面がくずれる原因になると思います。自分の環境(Windows10 JDK1.8.0_131)では絵を書いたときにボタンがおかしな位置(左上)に描画されてしまいます。