回答編集履歴
1
追記
test
CHANGED
@@ -84,6 +84,8 @@
|
|
84
84
|
|
85
85
|
super.paintComponent(g);
|
86
86
|
|
87
|
+
// BufferedImageを再度作成。
|
88
|
+
|
87
89
|
seve_field = new BufferedImage(600, 600, BufferedImage.TYPE_4BYTE_ABGR);
|
88
90
|
|
89
91
|
// インスタンス変数 seveへの代入は下記行で行っているので、省略
|
@@ -158,7 +160,7 @@
|
|
158
160
|
|
159
161
|
2点目、オフスクリーンメモリの扱いと描画順序について
|
160
162
|
|
161
|
-
event#paintComponentメソッド内でseve2.drawLine、g2.drawLineと2箇所
|
163
|
+
event#paintComponentメソッド内でseve2.drawLine、g2.drawLineとJPanelとメモリの2箇所に対してdrawLineを行っていますが
|
162
164
|
|
163
165
|
0. オフスクリーン(seve_field)にdrawLine
|
164
166
|
|
@@ -177,3 +179,21 @@
|
|
177
179
|
4点目、あるコンポーネントのペイント領域を知りたい時は[SwingUtilities#calculateInnerArea](https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/SwingUtilities.html)が使用できます。
|
178
180
|
|
179
181
|
自分でオフスクーンを管理する時はJFrame(mainクラス)のウィンドウのサイズ変更イベントを契機にしてオフスクーンのサイズをコンポーネントのペイント領域と一致させる必要があります。面倒ならmainクラスのコンストラクタでthis.setResizable(false);を設定し、ウィンドウサイズを変更不可にしてください。
|
182
|
+
|
183
|
+
|
184
|
+
|
185
|
+
5点目、インスタンス変数seve について。
|
186
|
+
|
187
|
+
インスタンス変数に代入箇所が2箇所あります、
|
188
|
+
|
189
|
+
0. Graphics seve = seve_field.createGraphics();
|
190
|
+
|
191
|
+
0. event#paintComponentメソッド内
|
192
|
+
|
193
|
+
|
194
|
+
|
195
|
+
Graphics には[disposeメソッド](https://docs.oracle.com/javase/jp/8/docs/api/java/awt/Graphics.html#dispose--)があるため
|
196
|
+
|
197
|
+
使い終わったらseve.dispose();を呼び出してください。
|
198
|
+
|
199
|
+
|