我需要以这种格式显示JLabel文本。
Hoffenheim 1 : 0 Koeln
Bayern 2 : 1 HSV
我无法完成这件事。我没有运气就试过String.format()
。
有什么建议吗?
答案 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());
虽然这要复杂得多,但它为您提供了更大的格式灵活性。