我需要以这种格式显示 JLabel 文本。
Hoffenheim 1 : 0 Koeln
Bayern 2 : 1 HSV
我只是无法完成这件事。我试过String.format()
没有运气。有什么建议吗?
您可以使用 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()));
}
}
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 |
显然,您可以禁用边框等,这样在用户看来,除了格式良好的文本之外,它不会是任何东西。
从 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());
虽然这要复杂得多,但它为您提供了更大的格式化灵活性。