gpt4 book ai didi

java - 当显示 HTML 文本时,禁用时 JLabel 不会变灰

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:11:33 25 4
gpt4 key购买 nike

如何让显示 HTML 字符串的 JLabel 显示为灰色(这是不显示 HTML 文本的 JLabel 的行为)?除了通过修改 foreground 属性实际更改颜色之外,还有其他方法吗?

JLabel label1 = new JLabel("Normal text");
JLabel label2 = new JLabel("<html>HTML <b>text</b>");
// Both labels are now black in colour

label1.setEnabled(false);
label2.setEnabled(false);
// label1 is greyed out, label2 is still black in colour

非常感谢您的所有回复。据我所知,Java 似乎不支持 JLabel 在使用 HTML 文本时自动变灰。 Suraj's solution考虑到这些限制,最接近修复。

但是,我尝试了一种不同的开箱即用方法,我将 HTML 文本 JLabel 放在内部 JPanel 中并执行此操作:

mInnerPanel.setEnabled(shouldShow); //shouldShow is a boolean value

这没有用。对这种方式有什么建议吗?


编辑:添加了implemented solution .

最佳答案

如果文本是 HTML,文本不会变灰,因为 BasicLabelUI#paint() 中的以下代码

        View v = (View) c.getClientProperty(BasicHTML.propertyKey);
if (v != null) {
v.paint(g, paintTextR);
}

如您所见,如果文本是 html,则使用 View 进行绘制,并且不会检查标签是否启用。因此,我们需要如下所示明确地执行此操作:

label2.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
if (!evt.getPropertyName().equals("enabled"))
return;
if (evt.getNewValue().equals(Boolean.FALSE))
label2.setText("<html><font color=gray>HTML <b>text</b></html>");
else
label2.setText("<html><font color=black>HTML <b>text</b></html>");
}
});

关于java - 当显示 HTML 文本时,禁用时 JLabel 不会变灰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2242542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com