2016-07-16 8 views
0

私の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); 
     } 
    } 
} 
+0

すぐに役立つように、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 –

+1

BTW - 'protected void paintComponent(Graphics g){'はprotectedでなければなりません。void paintComponent(Graphics g){super.paintComponent(g); //前の図面をクリアしてください! ' –

+0

@AndrewThompsonありがとう! super.paintComponent(g)という行を追加することを提案して既に助けています。それは欠けている部分のように見えます。それは魅力のように働いた。私の質問に対する答えとしてこれを投稿すれば、私はそれを選ぶでしょう。 – melar

答えて

3
protected void paintComponent(Graphics g) { 

protected void paintComponent(Graphics g) { 
    super.paintComponent(g); // clear previous drawing! 

スーパーメソッドを呼び出すと、コンポーネントの背景が塗りつぶされ、以前の図面が消去されます。

関連する問題