Итак, вопрос: можно ли создавать окна в нативном стиле с рамками только с помощью Swing?
Вкратце: Нет. К сожалению, это невозможно сделать с помощью Swing.< br> Также: То же самое «Нет» относится к окнам инструментов, которые также можно создавать с помощью SWT.
Теперь позвольте мне объяснить, почему.
Swing использует написанный на чистом Java рендеринг для рисования любых компонентов и пользовательских украшений в вашем приложении. Тем не менее, оформление окна в Swing немного отличается - по умолчанию JFrame и JDialog оформлены с использованием собственного стиля - в основном, когда экземпляр окна создается в вашей системе из приложения Java - этому окну предлагается иметь оформление по умолчанию для фрейма или диалога (плюс некоторые другие возможные варианты). После этого это окно используется для рендеринга на нем компонентов Swing. Но код Swing не имеет реального контроля над предоставляемым системой декором, он может только включать/выключать его и настраивать в нем несколько параметров. К сожалению, искомого варианта там нет - скорее всего, он не был реализован как не очень популярный.
Хотя Swing позволяет создавать пользовательские стили компонентов/окна с помощью пользовательских L&F (Look and Feel). L&F, который поддерживает пользовательские декорации окон, просто предоставляет свой собственный способ рисования и управления оформлением окон. В случае, если такой L&F установлен - Swing по умолчанию использует недекорированные фреймы/диалоги и просто просит L&F сделать декорирование. Любой может написать свой собственный L&F, что означает, что каждый может создавать собственные украшения.
Итак, как уже упоминалось @camickr, у вас есть только один вариант, если вы хотите создать такой фрейм (как на снимке экрана в вашем посте) в Swing - используйте либо JDialog/JFrame с setUndecorated
, установленным в true, либо JWindow, который по умолчанию не декорирован, и «рисовать свой путь». Graphics2D, предусмотренный для всех операций рисования, позволит вам создать любое нестандартное оформление вашего окна, даже то, что на вашем скриншоте.
Не буду лгать - создавать нестандартное оформление окна довольно сложно - это требует больших знаний в Swing и большого количества написанного кода, а не только кода рисования. Так что я очень сомневаюсь, что вы выберете этот вариант, если вы не увлечены созданием пользовательского интерфейса.
В конце концов, вам придется выбирать между SWT и Swing (или даже JavaFX), поскольку каждая из этих инфраструктур пользовательского интерфейса предлагает совершенно разные наборы функций и опций. Оформление окон – это лишь верхушка большого айсберга.
РЕДАКТИРОВАТЬ: Поскольку JDK 7 фактически позволяет создавать окна инструментов, все, что вам нужно, это установить тип окна на Window.Type.UTILITY
. Хотя по-прежнему невозможно создать окно с родными рамками только без заголовка.
person
Mikle Garin
schedule
23.07.2014
just need to know what type of swing component can emulate the same look
- APIBorder
, как уже было предложено. Нет границы LAF, которую вы можете просто подключить, вам нужно написать свою собственную, если вам не нравятся стандартные границы JDK. - person camickr   schedule 18.07.2014