2012-04-11 5 views
2

meine Anwendung Layout ist so etwas wie: benutzerdefinierte JFrame (die nur die Erstellung der gui Griffe), die eine Standard-JPanel enthält, die eine benutzerdefinierte enthält JPanelJPanel malt nicht, wenn sie mit Affine Transform Skalierung

Innerhalb der benutzerdefinierten JPanel , die MinimapPanel genannt wird, änderte ich die Farbe Methode:

//in a constructor: 
    scaledTransform = new AffineTransform(); = new AffineTransform(); 
    scaledTransform = new AffineTransform(); 
    scaledTransform.scale(scaleAmount, scaleAmount); 
    //... 
@Override 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 

    Graphics2D g2d = (Graphics2D) g; 
    g2d.setTransform(scaledTransform); 
    mapDrawer.paintMinimap(g, seatMap, miniViewHandler);//it just calls a bunch of fillRect 

    if (viewRect != null) { 
     g.setColor(new Color(255, 0, 0)); 
     int x = viewRect.x; 
     int y = viewRect.y; 
     g.drawRect(x, y, Math.abs(viewRect.width), Math.abs(viewRect.height)); 
    } 
    g2d.setTransform(plainTransform); 
} 

Alles funktioniert gut, wenn ich die Transform nicht anwendbar ist, oder wenn die Skalierung von 1,0 (keine), aber wenn ich zu skalieren, jedes Mal wenn die JFrame repaints, das MinimapPanel bleibt leer.

Irgendwelche Ideen, was ich falsch machen könnte?

+0

Für eine bessere Hilfe, eine [SSCCE] (http://sscce.org/) abgeben. –

+0

Danke für den Kopf! – Enoon

Antwort

4

Verwenden Sie keine klaren Transformationen. Frühere Komponenten fügen ihre eigenen Transformationen hinzu, z. translate() zu Kind Position usw. nennen vielmehr den Code wie diese früher

AffineTransform old=g2d.getTransform(); 
//do your changes here 
g2d.scale(scaleAmount, scaleAmount); 
//paint 
g2d.setTransform(old); 
+0

Siehe auch dieses verwandte [Beispiel] (http://stackoverflow.com/a/9373195/230513). – trashgod

+0

Danke für die Köpfe, ich bin ziemlich neu in Swing. Was das Problem tatsächlich behoben hat, war die Verwendung von "g2d.scale (Menge, Menge)" anstelle von "g2d.setTransform (trasform)". Eine Idee warum? – Enoon

+0

Wie ich bereits sagte, ändern JComponents die Transformationen, indem sie translate() verwenden, um vor dem Malen auf child (für die 0 jedes Kindes) auf 0 zu positionieren. – StanislavL