2016-07-11 8 views
0

Manchmal werden bestimmte UI-Elemente mit einem Hover-Stil überhaupt nicht gerendert, und ein weißes Feld bleibt an seinem Platz. Dies geschieht erst, nachdem ich das Anwendungsfenster verkleinert habe und das UI-Element vollständig außerhalb der ursprünglichen Grenzen des Anwendungsfensters liegt. Der in den folgenden Abbildungen gezeigte Button wird nach dem Entfernen des Mauszeigers aus der Hover-Position nicht sofort richtig dargestellt, so dass das Problem immer dann auftritt, wenn der Button neu gezeichnet werden muss.JavaFX UI-Elemente Hover-Stil wird nach der Größenanpassung des Anwendungsfensters nicht richtig dargestellt

"Device Logging" button is being hovered by the mouse, before resizing the window.

After resizing the window. Both the "Device Logging" and "Misc Tests" buttons are 100% outside of the original bounds of the window. The "Cloud Server Migration" button however is still rendering correctly.

I Arten eingestellt haben, aber sie hat keine Auswirkung zu entfernen. Das Problem scheint nur dann zu erscheinen, wenn eine andere Verarbeitung stattfindet, z. B. das Ausführen der Firmware-Aktualisierungsfunktion. Das sagt mir, dass es etwas geben könnte, das die UI-Zeit in Anspruch nimmt, aber ich hätte erwartet, dass dies jedes UI-Element betrifft, nicht nur bestimmte.

Eine andere Anmerkung, die Benutzeroberfläche wurde von Swing zu JavaFX konvertiert, so dass das gesamte Threading die Verwendung von Task oder Platform.runlater() nicht enthielt. Ich habe seitdem sichergestellt, dass alle UI-Updates Platform.runlater() verwenden, aber ich habe noch nicht alle ursprünglichen Threads konvertiert, die die Benutzeroberfläche nicht zu Tasks aktualisieren. Im Folgenden werde ich den Rahmen für das Ausführen eines Firmware-Updates einschließen.

Edit: War in der Lage, das Problem zu reproduzieren, ohne ein Firmware-Update zu starten, also glaube ich nicht, dass es etwas mit der Verarbeitung blockieren UI-Rendering zu tun hat. Das Problem trat erst auf, nachdem ein Teil der Benutzeroberfläche verwendet wurde. Als solche habe ich den Code entfernt, der oben veröffentlicht wurde. Dies lässt mich glauben, dass es mehr mit dem tatsächlichen Layout der Benutzeroberfläche zu tun hat.

+0

Nichts fällt mir in den Sinn, und ich vermute, ohne ein minimales Beispiel, dass das Problem reproduziert, werden Sie hier nicht gelöst werden ... –

Antwort

0

Ich glaube, ich habe das Problem herausgefunden. Ich verwende eine ListView, um ein Objekt und eine cellfactory zu halten, um jede der Zellen mit einer benutzerdefinierten Benutzeroberfläche zu rendern. Beim Auffüllen der Liste mit Elementen werden zusätzliche Threads generiert, um Informationen für jedes Objekt in der Zelle abzurufen. Die dem Objekt zugeordneten Variablen sind an eine Ansichtseigenschaft innerhalb der benutzerdefinierten Benutzeroberfläche gebunden. Ich habe Platform.runlater() nicht verwendet, um diese Eigenschaften mit den neuen Informationen zu aktualisieren. Nach dem Aktualisieren der Sätze auf "runlater" scheint das Problem behoben worden zu sein.

Verwandte Themen