Я можу відповісти лише за те, що працювало на мене. Інші коментатори зазначають, що графічні інтерфейси Java взагалі потрапляють у «дивну долину» не зовсім рідного вигляду та почуття, і я не заперечую з цим.
Корисно використовувати API дій. Це дозволяє краще інкапсулювати різні дії, які виконує ваш користувач, і дозволить вам набагато легше підключити їх до ярликів, клавіш акселератора, кнопок та інших об'єктів введення.
Використовуйте відповідний менеджер компонування. GridBagLayout надзвичайно потужний, але я б пішов так далеко, щоб сказати, що це неможливо без зайвої кількості коментарів. Коли я запускаю інструменти аналізу статичного коду, такі як Sonar, над старішим додатком GUI, який я підтримую, він завжди вказує на величезні кількості магічних чисел, щоб зробити макет GridBags правильним. Я мав багато успіхів з GroupLayout, що дозволяє уникнути необхідності вирівнювання пікселів.
Якщо ви думаєте, що вам потрібен JDialog ... ви, мабуть, цього не робите. Діалогові вікна є жахливими, з точки зору досвіду користувачів - ця програма вирішила використовувати їх для кожного меню та форми, а також виконувати правила завжди на вершині химерними способами. Це перетворилося на кошмар технічного обслуговування, коли нам насправді потрібно було щось попередити через меню. Cue розчарував клацання на нефокусованих - і, таким чином, неприпустимих - діалогах.
Використовуйте SwingWorker замість того, щоб прокручувати власну багатопотоковість, де це доречно. Дуже просто розширити SwingWorker і виконати певну задачу, надаючи регулярні оновлення до GUI. Подумайте про завантаження оновлення клієнта. Він обробляє планування робочих ниток для вас і дозволить опублікувати відсотки завантаження назад до перегляду, щоб ви могли оновити свій ProgressBar або те, що у вас є.
Це все, що я можу запропонувати, за своїм досвідом обмеженим досвідом.