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.