具有特定HTML标记的多行Jlabel

时间:2011-10-13 09:16:54

标签: html swing label jlabel

我想在我的Jlabel中添加多行;我是在HTML的帮助下做的,但在某些情况下我有问题,情况是我使用特殊的标签属性,如dir =“RTL”和....我该怎么做才能解决这个问题?

如果我使用:
 jLabel1.setText("<html><center>John<br>2010/7/21 11:57:47 AM<br>In</center></html>");
标签显示:

        john   
2010/7/21 11:57:47 AM  
         In

但如果我使用:

jLabel1.setText("<html DIR=\"LTR\"><center>John<br>2010/7/21 11:57:47 AM<br>In</center></html>");

标签显示:

<html DIR=\"LTR\"><center>John<br>2010/7/21 11:57:47 AM<br>In</center></html>

2 个答案:

答案 0 :(得分:1)

jLabel1.setText("<html DIR="LTR"><center>John<br>2010/7/21 11:57:47 AM<br>In</center></html>");

需要

jLabel1.setText("<html DIR=\"LTR\"><center>John<br>2010/7/21 11:57:47 AM<br>In</center></html>");

也就是说,你需要在双引号字符串中转义双引号。您当前正在做的是打印<html DIR=,打破字符串,然后打印><center>John<br>2010/7/21 11:57:47 AM<br>In</center></html>

答案 1 :(得分:1)

如果您使用<html dir="ltr">开始标签文字,则它不是HTML标签,而是纯文本标签。原因是java.swing.plaf.basic.BasicHTML#isHtmlString(String)非常简单,其实现是

public static boolean isHTMLString(String s) {
if (s != null) {
    if ((s.length() >= 6) && (s.charAt(0) == '<') && (s.charAt(5) == '>')) {
    String tag = s.substring(1,5);
    return tag.equalsIgnoreCase(propertyKey);
    }
}
return false;
}

所以你只能使用<html><HTML>,或者有趣的是<abcd>或其他四个字母的单词:-)

因此,在您的情况下,您必须使用<html><span dir="ltr">Your text</span></html>。但是,Swing HTML子系统不支持dir属性。你必须致电

label.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT)

以更改标签的组件方向。