Проводя предварительное исследование этого вопроса , я обнаружил, что в Интернете не так много хорошо организованной информации о лучших практиках Java Swing. Так что я решил дать Stack Exchange шанс на создание этого Великого Списка.
Каковы лучшие практики разработки Java Swing? Что вы нашли для вас и почему?
Ответы:
Я могу ответить только за то, что сработало для меня. Другие комментаторы отмечают, что графические интерфейсы Java в целом попадают в «сверхъестественную долину» не совсем родного внешнего вида, и я не оспариваю это.
Хорошо используйте Action API. Это позволяет вам лучше инкапсулировать различные действия, которые будет выполнять ваш пользователь, и позволит вам гораздо легче связывать их с ярлыками, клавишами ускорения, кнопками и другими объектами ввода.
Используйте соответствующий менеджер макета. GridBagLayout чрезвычайно мощен, но я бы сказал, что его невозможно поддерживать без чрезмерного количества комментариев. Когда я запускаю инструменты статического анализа кода, такие как Sonar, поверх старого приложения с графическим интерфейсом, которое я поддерживаю, оно всегда указывает на огромное количество магических чисел, чтобы сделать макет GridBags правильным. У меня был большой успех с GroupLayout, который избегает необходимости точного выравнивания пикселей.
Если вы думаете, что вам нужен JDialog ... вы, вероятно, нет. Диалоговые окна ужасны с точки зрения пользовательского опыта - это приложение решило использовать их для каждого меню и формы, а также для обеспечения соблюдения правил «всегда на вершине» причудливыми способами. Это превратилось в кошмар обслуживания, когда нам действительно нужно было что-то предупредить по меню. Cue расстроен нажатием на не фокусируемые - и, следовательно, неотделимые - диалоги.
Используйте SwingWorker вместо использования собственной многопоточности, где это уместно. Расширить SwingWorker очень просто и выполнить какую-то длительную задачу, регулярно предоставляя обновления графическому интерфейсу. Подумайте, загрузив обновление клиента. Он будет обрабатывать планирование рабочих потоков для вас и позволит вам публиковать проценты загрузки обратно в представление, чтобы вы могли обновить свой ProgressBar или что у вас есть.
Это все, что я могу предложить, по общему признанию своего ограниченного опыта.
источник
JDialog
прекрасно - пока вы используете его для диалогов.JDialog
или нет).Я бы сказал, что одной из первых вещей является не работать над этим напрямую. Система компоновки в Swing (IMHO) ужасна, и попытка сделать из нее какое-либо существенное приложение - это кошмар.
Два из множества альтернативных менеджеров компоновки, которые я использовал, это макет MigLayout и MultiSplitPane. MigLayout более универсален и делает любой макет простым и вменяемым. MultiSplitPane является более конкретным; Я использовал его, чтобы сделать несколько простых макетов для GUI, которые не имели большой сложности.
РЕДАКТИРОВАТЬ : Это не заменяет качели . Если вам нужно использовать Swing, вы все равно можете использовать эти менеджеры раскладок, поскольку они управляют только Swing, а не заменяют его.
Конечно, лучшая альтернатива - просто не использовать Swing. Swing подвергается жесткой критике за то, что с ним ужасно работать, он не выглядит естественным и медленным. Существует множество альтернатив, которые научились на свинге тому, чего не следует делать, например, Qt, SWT, и я думаю, что даже GTK. Это отличные долгосрочные решения головной боли Swing
РЕДАКТИРОВАТЬ : Как сказал @Lord Torgamus, они не доступны, если вы вынуждены использовать Swing. Если вы собираетесь использовать их, лучше всего решить эту проблему при создании проекта, а не 3/4 или при выборе устаревших приложений.
Я также хотел бы отметить, что большинство альтернативных графических интерфейсов используют собственные библиотеки, чтобы они выглядели как операционная система, а затем вернулись к Swing или к другому графическому интерфейсу Pure Java.
источник