2012-03-29 10 views
3

Im Entwickeln einer GUI-Anwendung, die JSWing verwendet, lade ich XML-Datei, deserialiere sie dann und füge dann alle erstellten Objekte dem JPanel hinzu. jedoch bis ich das Fenster zu verschieben, oder auf dem Panel klicken, das ist, wie sie wieJava-Repaint zeigt Komponente nicht korrekt an

sehen enter image description here

Nachdem ich das Fenster zu verschieben, sie sehen richtig, so wie dieses Problem zu beheben <

ich sah diesen Link http://docs.oracle.com/javase/6/docs/api/javax/swing/JComponent.html#paintComponent(java.awt.Graphics) und es könnte die Antwort sein, da in dem Konstruktor des JComponent verwenden i

setOpaque(true); 

aber ich bin immer noch nicht sicher, wie das Problem zu beheben, da dieser Teil der Dokumentation sehr schwer zu verstehen ist (es macht irgendwie einfach keinen Sinn für mich :-D)

Übrigens, die Malerei selbst geht so etwas wie diese

for (NetObject o : objects) { 

       addNewObject(o); 
      } 

und addNewObject (nicht ganz Code)

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 

}

und die überschriebenen paintcomponent Code

@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... 
      } 
     } 

    } 

ich versuchte this.revalidate zu nennen - nach für jede Schleife - hilft nicht, die einzige Möglichkeit, die funktioniert, ist irgendwie mit dem Fenster zu bewegen, seltsam, besteht dieses Problem nur @ Windows mein Kollege dies entwickelt genau dieselbe Anwendung unter Linux, und er erlebt keine grafischen Probleme.

Ich weiß, dass es eine Menge Themen wie diese gab, aber ich war ehrlich gesagt nicht in der Lage, die Lösung herauszufinden.

Danke für die Antwort, OSIRIS

+0

Vielleicht 'pack()' wird es lösen. Andernfalls poste ein [SSCCE] (http://sscce.org/). –

Antwort

4

Die setBackground() API erwähnt, dass „es bis zu dem Aussehen und das Gefühl, diese Eigenschaft zu ehren, einige, es zu ignorieren können wählen.“ Stellen Sie die Farbe des Grafikkontexts explizit in paintComponent() ein und rufen Sie fillRect() auf.

+0

Siehe auch die Eigenschaft [Opazität] (http://java.sun.com/products/jfc/tsc/articles/painting/index.html#props). – trashgod

+0

Danke, einfach g.setColor (Color.WHITE); g.fillRect (0, 0, 48, 48); Boolescher Test = g.drawImage (config.place, 0, 0, this); // place g.drawString (object.loadTokens(), 3, 27); // 1,2,3,4 ... funktioniert! –

Verwandte Themen