【发布时间】:2025-12-23 14:25:12
【问题描述】:
我正在开发一个使用 Synth 作为 UI 的项目,并希望实现一些自定义按钮。按钮需要使用合成 XML 设置文件中的样式设置 - 例如不同状态(MOUSE_OVER、PRESSED 等)的不同字体颜色。
我遇到的问题是一些按钮需要有额外的子组件 - 例如有些需要多个标签。我希望子组件采用与标准按钮子组件相同的样式设置。
我觉得我应该能够扩展 JButton 和覆盖/扩展 paintComponent 来调用一些子组件的绘制方法。不过,我对这种方法的一些方面有点不确定:例如将哪些参数传递给paintComponent;以及如何确保子组件获得正确的 Synth 样式设置(尤其是状态)。
顺便说一句:我尝试过扩展JPanel,但在使用这种方法时遇到了一些困难(请参阅此处:JPanel states for Synth)。
编辑:所以,我发现可以将子组件添加到按钮并让它们正确呈现。似乎即使JButton.getLayout() 返回空值,按钮也会使用OverlayLayout,除非您调用JButton.setLayout()。调用 JButton.setLayout(null) 确实会阻止使用 OverlayLayout,所以这就是我处理布局的方式。
我正在研究几种不同的方法来更新子控件的样式,稍后会报告这些方法。
【问题讨论】:
-
我知道 UI 委托处理绘图,但由于(据我所知)基本上不可能扩展 Synth UI 委托,我希望有不止一种方法可以给这只猫剥皮。
标签: java swing jbutton look-and-feel synth