java使用Synth将自定义呈现程序绑定到组合框
我正在使用Synth定制我的LAF,现在我正在开发ComboBox,这让我很困惑。我查看了ComponentProperties Table并找到了ComboBox.listRenderer
属性,它为JComboBox的列表指定了一个渲染器。问题是我不知道如何将自己的渲染器绑定到它。我找到了一些以前的答案,比如:
<style id="ComboBoxListRenderer">
<opaque value="true"/>
<state>
<color type="TEXT_FOREGROUND" value="BLACK" />
</state>
</style>
<bind style="ComboBoxListRenderer" type="name" key="ComboBox.listRenderer"/>
这确实有效,但它只会更改默认的SynthComboBoxRenderer
行为,我无法将自己的渲染器类ui.MyComboBoxRenderer
绑定到它。我也试过了
<style id="comboBox">
...
<object id="ComboBoxListRenderer" class="ui.MyComboBoxListRenderer"/>
<property key="ComboBox.listRenderer" type="idref" value="ComboBoxListRenderer"/>
...
</style>
<bind style="comboBox" type="region" key="ComboBox"/>
可悲的是,这一次什么也没发生。知道如何将自定义渲染器应用于所有组合框吗?谢谢
# 1 楼答案
我自己设法弄明白了。对于任何寻求解决方案的人,您需要使用自己的
MyComboBoxUI
覆盖SynthComboBoxUI
,并在UI中提供自定义渲染器。例如:以及XML文件: