私のGUIに問題があります。私のjpanel上にjframeを拡張するクラスとは別のクラスであるグリッドを構築しています。ボタンをクリックし、jframeクラスで処理されるグリッドを開き、jpanelクラスで生成されたグリッドをクリックすると、2番目のグリッドが表示されます。それは、元の1センチメートル南にシフトした別のグリッドを意味します。私が推測しているのは、ちらつきの問題の場合のように、repaint()メソッドと関係があります。そのメソッドをjframeクラスとjpanelクラスの両方で呼び出しています。まだ私はそれのまわりで私の頭を包むことができません。ここで問題はどこですか?面白いですが、ウィンドウを最小化して最大化するために、GUIウィンドウのショートカット右上をクリックするとすぐに2番目のグリッドが消えます。私の問題に関連すると思う2つの方法を提供する。右下のbuttonlistenerに反応するのOpenFileメソッドはrepaint()メソッドを呼び出すたびにGUI要素が2倍になるのはなぜですか?
、ここでは私のJPanelクラスのpaintComponent()メソッドである私のJFrameクラスである:代わりにする必要があり
protected void paintComponent(Graphics g) {
// draw grid
/*
* for (int i = 0; i < height; i++) { g.drawLine(GameMain.GAP, i *
* GameMain.GAPBETWEENPOINTS + GameMain.GAP, (width - 1) *
* GameMain.GAPBETWEENPOINTS + GameMain.GAP, i *
* GameMain.GAPBETWEENPOINTS + GameMain.GAP); } for (int i = 0; i <
* width; i++) { g.drawLine(i * GameMain.GAPBETWEENPOINTS +
* GameMain.GAP, GameMain.GAP, i * GameMain.GAPBETWEENPOINTS +
* GameMain.GAP, (height - 1) * GameMain.GAPBETWEENPOINTS +
* GameMain.GAP); }
*/
// draw circles
if (islandListInAscendingOrder.size() > 0) {
for (int i = 0; i < islandListInAscendingOrder.size(); i++) {
x = islandListInAscendingOrder.get(i).getIslandCoordinate().x
* GameMain.GAPBETWEENPOINTS + GameMain.GAP
- (GameMain.R/2);
y = islandListInAscendingOrder.get(i).getIslandCoordinate().y
* GameMain.GAPBETWEENPOINTS + GameMain.GAP
- (GameMain.R/2);
g.drawOval(x, y, GameMain.R, GameMain.R);
}
}
}
すぐに役立つように、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 –
BTW - 'protected void paintComponent(Graphics g){'はprotectedでなければなりません。void paintComponent(Graphics g){super.paintComponent(g); //前の図面をクリアしてください! ' –
@AndrewThompsonありがとう! super.paintComponent(g)という行を追加することを提案して既に助けています。それは欠けている部分のように見えます。それは魅力のように働いた。私の質問に対する答えとしてこれを投稿すれば、私はそれを選ぶでしょう。 – melar