如何格式化JLabel中的文本

时间:2012-07-17 23:01:46

标签: java swing jlabel

我需要以这种格式显示JLabel文本。

Hoffenheim  1 : 0  Koeln
    Bayern  2 : 1  HSV

我无法完成这件事。我没有运气就试过String.format()。 有什么建议吗?

3 个答案:

答案 0 :(得分:6)

您可以使用HTML。有关详细信息,请阅读How to Use HTML in Swing Components。例如,您可以构建一个表,类似于以下内容:

import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class StringDemo {

    public static void main(String arg[]){

        StringBuilder buff = new StringBuilder();
        buff.append("<html><table>");
        buff.append(String.format("<tr><td align='right'>%s</td><td>:</td><td>%s</td></tr>", "Hoffenheim  1", "0  Koeln"));
        buff.append(String.format("<tr><td align='right'>%s</td><td>:</td><td>%s</td></tr>", "Bayern  2", "1  HSV"));
        buff.append("</table></html>");

        JOptionPane.showMessageDialog(null, new JLabel(buff.toString()));
    }
}

答案 1 :(得分:3)

String.format()用于将内容插入特殊格式的字符串,而不是以不同方式显示字符串。 JLabels和其他Swing组件确实允许HTML,它可以为您提供所需的功能。

new JLabel("<html><pre>         Hoffenheim  1 : 0  Koeln</pre></html>");
new JLabel("<html><pre>             Bayern  2 : 1  HSV</pre></html>");

也就是说,看起来你要求的是将文本放在那些冒号周围,而不是让它们离边缘有一定数量的空间。这会有点棘手,但仍有可能。要做到这一点,你需要实际将所有内容分解为几个标签并将它们排列在一个网格中(我发现MigLayout非常适合这样的事情。)

根据需要创建六个JLabel left, right, or center aligning,然后将其放入网格中:

| Hoffenheim  1 | : | 0  Koeln |
|     Bayern  2 | : | 1  HSV   |

显然,您可以禁用边框等等,这样用户看起来不会是格式化的文本。

答案 2 :(得分:2)

从dimo414扩展回答你实际上可以使用HTML表

StringBuilder sb = new StringBuilder(128);

sb.append("<html>");
sb.append("<table border='0'>");
sb.append("<tr>");
sb.append("<td align='right'>Hoffenheim</td>");
sb.append("<td align='center'>1</td>");
sb.append("<td align='center'>:</td>");
sb.append("<td align='center'>0</td>");
sb.append("<td align='left'>Koeln</td>");
sb.append("</tr>");
sb.append("<tr>");
sb.append("<td align='right'>Bayern</td>");
sb.append("<td align='center'>2</td>");
sb.append("<td align='center'>:</td>");
sb.append("<td align='center'>1</td>");
sb.append("<td align='left'>HSV</td>");
sb.append("</tr>");
sb.append("</table>");
sb.append("</html>");

label.setText(sb.toString());

虽然这要复杂得多,但它为您提供了更大的格式灵活性。