Bei meinen Voruntersuchungen zu dieser Frage stellte ich fest, dass es im Internet nicht viele gut organisierte Informationen zu den Best Practices von Java Swing gibt. Also werde ich Stack Exchange eine Chance geben, diese One Great List zu erstellen.
Was sind die Best Practices der Java Swing-Entwicklung? Was haben Sie gefunden, um für Sie zu arbeiten, und warum?
Antworten:
Ich kann nur antworten, was für mich funktioniert hat. Andere Kommentatoren haben darauf hingewiesen, dass Java-GUIs im Allgemeinen in das „unheimliche Tal“ nicht ganz nativen Aussehens fallen, und ich bestreite dies nicht.
Nutzen Sie die Action-API. Sie können damit verschiedene Aktionen, die Ihr Benutzer ausführt, besser zusammenfassen und sie einfacher mit Verknüpfungen, Zugriffstasten, Schaltflächen und anderen Eingabeobjekten verknüpfen.
Verwenden Sie einen geeigneten Layout-Manager. GridBagLayout ist extrem leistungsfähig, aber ich würde sogar sagen, dass es ohne übermäßige Anzahl von Kommentaren nicht zu warten ist. Wenn ich statische Code-Analyse-Tools wie Sonar über eine ältere, von mir verwaltete GUI-App starte, werden immer die riesigen Mengen an magischen Zahlen angezeigt, damit das GridBags-Layout genau richtig ist. Ich hatte viel Erfolg mit GroupLayout, bei dem keine pixelgenaue Ausrichtung erforderlich ist.
Wenn Sie glauben, Sie brauchen einen JDialog , tun Sie das wahrscheinlich nicht. Dialogfelder sind in Bezug auf die Benutzererfahrung schrecklich - diese Anwendung entschied sich dafür, sie für jedes Menü und jede Form zu verwenden und die Regeln, die immer im Vordergrund stehen, auf bizarre Weise durchzusetzen. Dies wurde zu einem Wartungs-Albtraum, als wir tatsächlich etwas über das Menü benachrichtigen mussten. Cue frustriertes Klicken auf nicht fokussierbare - und damit nicht entblößbare - Dialoge.
Verwenden Sie SwingWorker, anstatt gegebenenfalls Ihr eigenes Multithreading zu rollen. Es ist sehr einfach, SwingWorker zu erweitern und einige langwierige Aufgaben zu erledigen, während regelmäßig Updates für die GUI bereitgestellt werden. Denken Sie daran, ein Client-Update herunterzuladen. Es übernimmt die Planung des Worker-Threads für Sie und ermöglicht es Ihnen, Download-Prozentsätze wieder in der Ansicht zu veröffentlichen, sodass Sie Ihre ProgressBar oder Ihre vorhandenen aktualisieren können.
Das ist alles, was ich in meiner zugegebenermaßen begrenzten Erfahrung vorschlagen kann.
quelle
JDialog
ist völlig in Ordnung - solange Sie es für Dialoge verwenden.JDialog
oder ohne implementiert sind ).Ich würde sagen, eines der ersten Dinge ist, nicht direkt daran zu arbeiten. Das Layout-System in Swing (IMHO) ist schrecklich, und es ist ein Albtraum, eine umfangreiche App daraus zu machen.
Zwei der vielen alternativen Layout-Manager , die ich verwendet habe, sind MigLayout- und MultiSplitPane-Layouts. MigLayout ist allgemeiner und macht jedes Layout, das Sie sich vorstellen können, auf eine einfache, vernünftige Art und Weise. MultiSplitPane ist spezifischer. Ich habe damit einige einfache Layouts für GUIs erstellt, die nicht sehr komplex waren.
EDIT : Dies ersetzt nicht Swing . Wenn Sie Swing verwenden müssen, können Sie diese Layout-Manager weiterhin verwenden, da sie nur Swing verwalten und nicht ersetzen.
Natürlich ist die bessere Alternative, Swing einfach nicht zu benutzen. Swing wird heftig dafür kritisiert, dass es schrecklich ist, damit zu arbeiten, nicht einheimisch und langsam aussieht . Es gibt viele Alternativen, die vom Swingen gelernt haben, was man nicht tun soll, wie Qt, SWT und ich denke sogar GTK. Dies sind großartige langfristige Lösungen für die Kopfschmerzen von Swing
EDIT : Wie @Lord Torgamus sagte, sind diese nicht wirklich verfügbar, wenn Sie gezwungen sind, Swing zu verwenden. Wenn Sie diese verwenden möchten, sollten Sie dies beim Erstellen Ihres Projekts erledigen, nicht bei 3/4 des Durchgangs oder beim Aufnehmen älterer Apps.
Ich möchte auch erwähnen, dass die meisten alternativen GUIs native Bibliotheken verwenden, um wie das Betriebssystem auszusehen, und dann auf Swing oder eine andere reine Java-GUI zurückgreifen.
quelle