2012-03-29 20 views
3

GUIアプリケーションの開発、JSWingを使用してXMLファイルをロードしてから逆シリアル化し、JPanelにすべてのオブジェクトを追加します。私は、ウィンドウを移動したり、パネルをクリックするまで、彼らはenter image description hereJava再描画コンポーネントが正しく表示されない

私は、ウィンドウを移動した後

どのように見えるか は、しかし、これは、彼らはので、この問題を解決する方法を、正しく見える<

私は、このリンク http://docs.oracle.com/javase/6/docs/api/javax/swing/JComponent.html#paintComponent(java.awt.Graphics) を見てのJComponentのコンストラクタで、私は

setOpaque(true); 
を使用するので、それは、答えであるかもしれませんしかし、私はまだ問題の解決方法が分からないので、ドキュメントの部分が非常に分かりにくいです(何らかの意味で私には分かりません:-D)

ところで、絵画そのものは次のようになりますこの

for (NetObject o : objects) { 

       addNewObject(o); 
      } 

とaddNewObject(全体ではなくコード)

public void addNewObject(NetObject o) { 



     DraggableComponent object = new DraggableComponent(o, editorIndex); //Creates a draggableComponent 
     this.add(object);//Adds this component to main container 

     object.setOverbearing(true); //On click ,this panel gains lowest z-buffer 


      object.setSize(48, 48); 
      object.setLocation(o.x - 23, o.y - 23); 
      object.setBackground(Color.WHITE); 
      this.repaint(); //this = JPanel 

}

とオーバーライドpaintComponentコード各ループの後 - -

@Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     if (isOpaque()) { 
      if (object.type == 2) { //tarnsition 
       g.drawImage(transition, 0, 0, this); 

      } else if (object.type == 1) { 
       boolean test = g.drawImage(place, 0, 0, this); //place 
       g.drawString(object.loadTokens(), 3, 27); // 1,2,3,4... 
      } 
     } 

    } 

iがthis.revalidateを呼び出そうとdidntの助けを借り、働く唯一の方法は、ウィンドウに何とか移動させることで、妙に、この問題は私の同僚がこれを開発している、Windowsのみ@存在しますLinuxではまったく同じアプリケーションであり、グラフィカルな問題は経験しません。

私はこのようなトピックが非常にたくさんあることを知っていますが、私は正直なところ解決策を見つけられませんでした。答えを

おかげで、 OSIRIS

+0

おそらく 'pack()'がそれを解決します。それ以外の場合は、[SSCCE](http://sscce.org/)を投稿してください。 –

答えて

4

setBackground() APIは、「それは一見までですと、いくつかはそれを無視することもできます。このプロパティを称えるために感じる。」と述べてグラフィックスコンテキストの色をpaintComponent()に明示的に設定し、fillRect()を呼び出します。

+0

[opacity](http://java.sun.com/products/jfc/tsc/articles/painting/index.html#props)プロパティも参照してください。 – trashgod

+0

ありがとう、単純にg.setColor(Color.WHITE); g.fillRect(0、0、48、48); ブール値テスト= g.drawImage(config.place、0、0、this); // place g.drawString(object.loadTokens()、3、27); // 1,2,3,4 ...作品! –

関連する問題