带有不同文本和图标背景颜色的JLabel

3

我有一个简单的带有文本和图标的JLabel元素。

设置背景会改变整个标签的颜色。

我想只在标签的文本部分上渲染背景颜色,即为图标和文本设置单独的背景/前景。选择/取消选择标签将翻转图标和文本背后的颜色。扩展JLabel可以实现这一点吗,如果可以,应该自定义哪些方法?

我的替代想法是创建一个面板,其中包含两个单独的标签元素,一个带有图标,另一个带有文本。这似乎有点混乱,在开始之前,我想知道是否有更聪明的方法使用Swing来实现这一目标。


听起来你需要的不是一个标签,而是一个带有自定义UI的按钮,例如通过JButton.setUI()实现。(另一种方法是将标签添加到按钮上——JButton扩展了Container——然后通过各种按钮事件更改其背景。) - William Billingsley
3个回答

1

我喜欢你的风格,但看起来你正在重新实现JToggleButton。

这里有一个切换按钮的示例,左边被选中,右边未被选中:

alt text http://downloads.padlocksoftware.net/toggle.png

它没有在文本上方添加花哨的背景,但这是一个不需要你自己实现组件的解决方案。

对齐方式设置为:

jToggleButton2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
jToggleButton2.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);

0

我假设你使用的图标具有透明背景?如果是这样的话,你可以使用一个具有相匹配背景颜色的图标。这样做应该允许你在整个标签上设置背景,但只在文本上看到它。


是的 - 使用透明图标来表示选中和未选中的操作。整个想法是避免重新生成或更改图标颜色。我知道我可以通过黑客手段解决,但我正在寻找正确的解决方案。 - emeraldjava

0

JButton 支持不同的图像和文本对齐选项。在大多数情况下,图像或文本都不会填满按钮的整个宽度或高度。因此,在一个按钮中实现这一点是不现实的,除非您想覆盖按钮的绘制。

您的替代想法是一个更简单的解决方案。在那里,您可以使用 BorderLayoutMigLayout 来实现您的目标。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接