В частности, в настоящее время у меня есть JPanel с TitledBorder. Я хочу настроить внешний вид границы. В текущем состоянии моего приложения отображается заголовок, но не сама граница линии.
Если я привяжу imagePainter к методу panelBorder для объектов Panel, я могу разместить вокруг панелей собственное изображение - однако оно отображается только на тех панелях, для которых я явно не установил границу в коде. Вот как выглядит этот код:
<style id="PanelStyle">
<state>
<imagePainter method="panelBorder" path="images/thick border.png" sourceInsets="3 3 3 3" />
</state>
</style>
<bind style="PanelStyle" type="region" key="Panel" />
Как я могу сделать наоборот - то есть, чтобы это пользовательское изображение отображалось только на панелях, к которым я применил TitledBorder?
Я также пытался использовать именованную панель:
panel.setName("MyPanel")
и привязка имени:
<bind style="PanelStyle" type="name" key="MyPanel">
Это позволяет мне менять стиль только отдельных панелей, что хорошо. Однако это не решает исходную проблему: я все еще не могу настроить NamedBorder моей панели.
Если я укажу NamedBorder, мой художник PanelBorder игнорируется, и печатается только имя. Если я уберу свой NamedBorder, я смогу использовать мою собственную графику границ, но тогда мне придется тыкать и подталкивать свой макет, чтобы получить JLabel в том же месте, где был заголовок, что нежелательно. 1018 *
Дальнейшие исследования показали, что причина отсутствия отображаемой строки в том, что конструктор TitledBorder принимает аргумент другой Границы, которую он отображает в дополнение к заголовку. Я не передавал этот аргумент, и значение по умолчанию зависит от выбранного вами L & F. Когда я использовал System L & F, по умолчанию был LineBorder. По-видимому, по умолчанию Synth - это EmptyBorder. Явное указание LineBorder возвращает меня назад, что решает большую часть моей проблемы.
Остальная часть моей проблемы связана с использованием пользовательской графики для LineBorder. Пока я получаю, визуализируя свою собственную графику как второе изображение PanelBackground - оно накладывается поверх фактического фона и достигает желаемого визуального эффекта, хотя это не идеальная реализация.