JPanel Grafik clearing-und Malerarbeiten?
Ich habe eine JPanel
mit einem paintComponent()
Funktion. Ich nenne es einmal, dann, wenn der Benutzer auf eine andere JButton
, ich werde einige-Flagge und wollen, rufen Sie diese Funktion wieder, da wird es etwas etwas anderes, nachdem das flag gesetzt ist.
Also hier ist was ich Frage mich: wie lösche ich die vorhandenen Sachen von paintComponent
? Und neu zu zeichnen, muss ich nur rufen paintComponent
wieder?
Derzeit versuche ich Folgendes:
flag2 = true;
repaint(); //I expect (want) paintComponent to be called again
In Farbe Komponente, mache ich Sachen wie:
if (flag2==true) {
g.drawRect(...);
} else {
g.drawLine(...);
}
Aber durch Tests, es scheint, wie es ist etwas falsch mit dem, was ich Tue.
Vielen Dank für jede Hilfe.
- Sie sind sich nicht aufrufen von repaint() innerhalb der paintComponent-Methode sind Sie? Sind Sie sicher, dass die repaint () - Aufruf ist verbunden mit der Platte, die Sie wollen aktualisiert? (z.B. myPanel.repaint())?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie eine Eigenschaft ändern der panel dann müssen Sie invoke:
zu verursachen, die Komponente neu lackiert werden.
Dann die erste Anweisung in der paintComponent () - Methode sollte sein:
Dieser Farbe wird der hintergrund, also können Sie nun tun, Ihr custom-painting.
Wenn Sie weitere Hilfe benötigen dann poste deine SSCCE, die das problem veranschaulicht.
Deaktivieren Sie alle vorher gezeichneten Grafiken, rufen Sie
g.clearRect(0, 0, getWidth(), getHeight())
.Erste, warum nicht ein enum statt eines booleschen?
Mit Bezug auf Ihr Thema ist, können Sie Antworten auf meine Kommentare in deiner Frage?
Ich würde vorschlagen, Aufruf von revalidate(); anstelle von repaint(). revalidate() muss aufgerufen werden, wenn die änderung der Größe /layout, oder wenn Sie Objekte hinzufügen/entfernen auf dein jpanel und aktualisiert alle seine Kinder. Was ich sagen kann, Sie sind immer noch mit der gleichen paint-Objekt tho, aber es verändert das layout.