Wie Andrew darauf hingewiesen, der Grund von warum die Neulackierung passiert nach der Änderung der X-Wert ist einfach: Der repaint()
Aufruf führt nicht dazu, den Inhalt sofort gemalt werden. Es teilt dem Windowing-System nur mit, die Komponente so schnell wie möglich neu zu zeichnen. Dies kann jedoch einige Millisekunden später auf einem anderen Thread geschehen.
Weitere Details finden Sie beispielsweise unter http://www.oracle.com/technetwork/java/painting-140037.html.
Basierend auf der Beschreibung des eigentlichen Ziels, obwohl es immer noch vage ist:
Ich habe einen Kasten (Rechteck), die rechts & links bewegt (auf x-Achse) in jeder Sekunde (was erfordert, neu zu streichen), aber ich mag die Position (Wert der x-Achse) dieses Feld ändern, nachdem
Es ist noch nicht klar, warum der x-Wert neu zu streichen nach Neulackierung ändern soll. Was passiert, nachdem sich der x-Wert geändert hat? Warum sollte es nicht auf die Position gemalt werden, die es tatsächlich hat, wenn es gemalt wird?
Die letzte Frage könnte jedoch bereits zu einer möglichen Antwort führen: Wenn Sie zwischen einer "echten" Position und einer "malen" Position unterscheiden wollen, können Sie dies explizit und übersichtlich modellieren: Zusätzlich zum aktuellen x
Variable, könnte die Klasse ein Feld haben, das paintX
genannt werden kann. Es ist die Position, an der die Box gemalt werden sollte, unabhängig von dem Wert, den x
derzeit hat.
Natürlich klingt das fummelig, und der Grund, warum Sie dies tun müssen, ist, dass das Modell und die Ansicht nicht klar getrennt sind. Aber auf jeden Fall, bedenken Sie, dass selbst wenn Sie das Objekt zu bemalen zwingen könnte und ändern Sie den x-Wert nach das Objekt wurde gemalt, müssen Sie daran denken, dass es dann wieder lackiert werden kann die neue x-Position. Sie können nicht verhindern, dass das Fenster neu gezeichnet wird, und dies liegt außerhalb Ihrer Kontrolle.
versuchen, validate() vor dem Repaint aufzurufen. aber in jedem Fall ist es eine schlechte Idee, zu hoffen, dass der veränderte Wert in Bezug auf das Malen nicht versehentlich neu gestrichen wird. – rustot
Der Versuch, etwas mit dem Farbmechanismus zu synchronisieren, ist in den meisten Fällen ein Zeichen für einen Designfehler. Sie sollten genauer beschreiben, was Sie eigentlich * erreichen * wollen. – Marco13
@ Marco13 nur um den Wert von x nach der Neulackierung zu ändern –