4

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

Hoffenheim  1 : 0  Koeln
    Bayern  2 : 1  HSV

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

4

3 回答 3

7

您可以使用 HTML。阅读如何在 Swing 组件中使用 HTML 以了解详细信息。例如,您可以构建一个表,类似于以下内容:

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()));
    }
}
于 2012-07-17T23:20:31.730 回答
4

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,左、右或居中对齐它们,然后像​​这样拖放到网格中:

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

显然,您可以禁用边框等,这样在用户看来,除了格式良好的文本之外,它不会是任何东西。

于 2012-07-17T23:09:15.187 回答
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());

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

于 2012-07-17T23:17:07.073 回答