我在尝试让Stringbuilder中包含的换行符出现在JLabel中时遇到了麻烦。
我发现这里解决了几个类似的问题,例如: [这里] Problems to linebreak with an int in JLabel和[here] How do I append a newline character for all lines except the last one?,以及其他几个,但似乎没有一个适合我。
当打印到System.out时,它工作正常,我每次都会得到一个新行,但是当传递给JLabel时,所有内容都显示为一行。
这是代码的当前版本,它试图附加换行符,并在主声明中包含一个换行符。传递给JLabel时都没有任何影响:
public void layoutCenter() {
JPanel central = new JPanel();
add(central, BorderLayout.CENTER);
JTabbedPane tabs = new JTabbedPane();
this.add(tabs);
// memory tab
StringBuilder mList = new StringBuilder();
memLocList = new Memory[MEM_LOCATIONS]; //Memory is a separate class
for (int i = 0; i < memLocList.length; i++) {
mList.append("\n");
memLocList[i] = null;
mList.append("Memory location: " + i + " " + memLocList[i] + "\n");
}
System.out.println(mList.toString());
JComponent memTab = makeTextPanel(mList.toString());
tabs.addTab("Memory", memTab);
}
protected JComponent makeTextPanel(String text) {
JPanel panel = new JPanel(false);
JLabel filler = new JLabel(text);
panel.add(filler);
return panel;
}
我也尝试过使用类似结果的System.getProperty(line.separator),并且无法想到其他任何事情,所以我想在这里寻求帮助。
谢谢, 罗伯特。
- 编辑 -
感谢mKorbel,将JLabel更改为JTextPane解决了这个问题。 有问题的两条线是:
JTextPane filler = new JTextPane();
filler.setText(text);
再次感谢大家。
答案 0 :(得分:2)
你将不得不使用&lt; html&gt;和&lt; br&gt;在JLabel Swing组件中获取换行符。
答案 1 :(得分:2)
如果你绝对必须使用JLabel
,那么我建议每行使用一个。
答案 2 :(得分:2)
您可以通过将文本包装在HTML标记中并使用br标记添加新行来使JLabel拥有多行。
如果你有新闻自动包装我建议使用JTexrArea。你可以使它不可编辑并设计它,使它看起来像一个标签。
答案 3 :(得分:2)
JLabel
未指定持有多行文档,有两种选择(默认情况下接受换行符或制表符)
如果无法以某种方式对文档进行装饰或样式设置,请使用JTextArea
可以某种方式进行装饰或设计,然后使用JEditorPane or JTextPane
答案 4 :(得分:2)
您可以查看本教程: http://docs.oracle.com/javase/tutorial/uiswing/components/html.html
其中一个例子是使用html为JButton文本创建两行。它应该非常相似。