java JFrame Grafiken
Ich habe folgenden einfachen code in ein JFrame-Konstruktor
super(name);
setBounds(0,0,1100,750);
setLayout(null);
setVisible(true);
g = this.getGraphics();
int[] x =new int[]{65, 122, 77, 20, };
int[] y =new int[]{226, 258, 341, 310};
g.setColor(Color.RED);
g.drawPolygon (x, y, x.length);
System.out.println(g);
Bekomme ich die Ausgabe auf der Konsole:
sun.java2d.SunGraphics2D[font=java.awt.Font[family=Dialog,name=Dialog,style=plain,size=12],color=java.awt.Color[r=255,g=0,b=0]]
Aber kein rotes polygon gezeichnet JFrame, aber nur die leeren JFrame.
Warum ??
Ist dies nicht der richtige Weg, um zu zeichnen auf einem JFrame. Sollten Sie JPanel-Unterklasse und überschreiben
paintComponent(Graphics)
, und tun das Gemälde auf das graphics-Objekt übergeben es.InformationsquelleAutor aditya parikh | 2012-10-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dont überschreiben
paint(..)
imJFrame
Eher hinzufügen benutzerdefinierte
JPanel
mit überschriebenpaintComponent(Graphics g)
zuJFrame
Nicht
Null
/AbsoluteLayout
verwenden Sie eine passendeLayoutManager
Dont call
setBounds(..)
aufJFrame
Instanz (nicht, dass Ihr nicht erlaubt, kann aber nicht sehen, dass es relevant für diese Anwendung)Vergessen Sie nicht, verwenden Sie EDT für das anlegen und ändern von GUI-Komponenten:
würden Sie dann etwas wie das hier tun:
produziert:
danke... für
setBounds(..)
ich habe keine konkreten Beweise, aber ich sehe es als eine Verschmelzung vonsetSize()
undsetLocation()
. I dont haben ein problem mitsetLocation()
(neben der Tatsache, dass die position könnte off screen), abersetSize()
bekannte Probleme, wie die Komponenten werden ausgeblendet aufgrund falscher Größe geschenkt etc und das gleiche kann passieren, wenn die Einstellung der Höhe und Breite mitsetBounds(x,y,width,height)
. Obwohl ich bin offen für Kritik 🙂Ich persönlich habe keine bestimmte Frage -, pack-und setLocationRelativeXxx sind in der Regel mehr nützlich Tag zu Tag, IMHO, obwohl es manchmal nötig/wünschenswert, um den Speicherort anzugeben-Größe direkt. Es würde "abschrecken" die Verwendung der absoluten Positionierung auf diese Weise ohne guten Grund, aber das ist nur mir. Wollte nur, um Ihre Sicht 😉
sehr wahr, und nicht ein problem, ich bearbeitet die post, um die änderung anzuzeigen und OP und andere können sehen, Kommentare
Hey, ich bin das hinzufügen der folgenden Bild in das Jpanel msu-footprints.org/2011/Aditya/map.jpg und dann hinzufügen von polygon
int[] x = new int[]{65, 122, 77, 20}; int[] y = new int[]{226, 258, 341, 310}; g.setColor(Color.RED); g.drawPolygon(x, y, x.length);
Das polygon sollte Zusammenfallen mit der Gebäude-GER aber ist ein wenig bit-offset. Mein proff sagt der co-Ordinaten sind in Ordnung. Gibt es etwas falsch mit, wie ich das Bild positionieren.InformationsquelleAutor David Kroukamp
Sollten Sie besser überschreiben
paint(Graphics g)
oderpaintComponent(Graphics g)
als die Methode, die Sie versuchen. Fügen Sie die Zeilen unten und entfernen Sie die Zeilen, nachsetVisible
im code.Aber die paint-Methode ausgeführt wird beim start automatisch. Ich möchte, um programmgesteuert zu entscheiden, Wann zu ziehen.
Dann setzen Sie ein Kennzeichen, und zeichnen Sie das Zeug unter dem Lack nur, wenn das flag entscheidet.
Sie sollten wirklich nicht überschreiben, eine top-level-Container paint-Methode. Abgesehen von allem anderen, es ist nicht doppelt gepuffert ist, besser zu überschreiben, etwas, das sich von JComponent
Das ist wahr. Jedoch habe ich gezeigt, wo das falsche Teil ist. Die Dinge können auf jeden Fall verbessert werden, in diesem Punkt.
InformationsquelleAutor Dan D.