Neuzeichnen von graphics in Java
Bin ich auch einfach nur in die Grafik in Java und habe ein problem. Erstellt habe ich ein JFrame Fenster (NetBeans-Designer) mit einem JPanel panel und ich zog einige Grafiken auf Sie. Dann habe ich einen JButton, der verändert eine variable, die zu einer Veränderung der X-position ein Quadrat auf dem JPanel.
On-Taste drücken Sie diese code ausgeführt werden würde:
drawObject.setX(150);
drawObject.repaint();
drawObject wird eine Instanz dieser Klasse:
public class sola extends JPanel {
private int x = 10;
@Override
public void paintComponent(Graphics g){
super.paintComponents(g);
super.setBackground(Color.WHITE);
g.setColor(Color.ORANGE);
g.fill3DRect(x, 160, 100, 50, true);
}
public void setX(int xX){
x = xX;
}
}
Nun, wenn ich auf den Button JButton, das Rechteck nicht verschieben an die neue position, aber es ist immer noch sichtbar in die alte position. Nur wenn ich die Größe der Fenster nicht, es aktualisieren und das alte Rechteck verschwindet. Wie kann ich dieses problem lösen, so dass, wenn ich drücken Sie die-Taste, das Rechteck ist nur dann sichtbar, in der neuen position?
Ich dünne das ist eine ziemlich klare Frage für die erste Frage.
InformationsquelleAutor Squeazer | 2011-03-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist
nicht
Große Unterschied zwischen den beiden! Die erste erzählt Ihren JPanel zu tun, alle die housekeeping-Funktionen, die normalerweise ausgeführt, indem die paintComponent-Methode, einschließlich Malerarbeiten im hintergrund (key-Projekt). Die zweite, die eine, die Ihre Berufung nicht einer der oben genannten Funktionen. Also mein Rat ist, um loszuwerden, das nachgestellte s in Ihrem super-Aufruf.
Du bist herzlich willkommen -- danke für das feedback!
InformationsquelleAutor Hovercraft Full Of Eels
Können Sie die folgenden Methoden von JComponent: ( http://download.oracle.com/javase/6/docs/api/javax/swing/JComponent.html )
Können Sie rufen jene, die vor
redraw()
InformationsquelleAutor Bernd Elkemann
Könnten Sie
repaint()
Methode zu tun tis.Wenn du die paintComponent() auf dem Bedienfeld. Man sollte IMHO aufpassen, das Gemälde in die ganze Tafel. Es gibt keinen code in deinem Beispiel die sich darum kümmert das löschen der alten gemalten Rechtecke.
Was ich empfehle, ist das erstellen einer eigenen Komponente für Ihre Rechtecke. (Sie könnten erweitern von Komponenten), dann können Sie überschreiben die
paintComponent
Methode dieser Klassen, wie Sie es in Ihrer Systemsteuerung. Weil das Panel handeln sollte, wie Sie eine container-Komponente. Nicht als zeichnen der Rechtecke verwenden.Wissen, hinzufügen von Instanzen dieser Komponenten auf ein normales JPanel. Dies sollte dann aktualisiert, wie erwartet.
InformationsquelleAutor Chris