作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如何让显示 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/
经过很长时间的尝试,我仍然找不到解决问题的正确方法。问题是将这个灰度图像分割成 3 种不同的颜色:边界应该是黑色,边界的内部空间应该是白色,所有其他介质应该是黑色。 我尝试了几种不同的方法,包括直接强
这个问题在这里已经有了答案: What is the difference between "./somescript.sh" and ". ./somescript.sh" (4 个答案) 关闭
我是一名优秀的程序员,十分优秀!