我在尝试将换行符包含在Stringbuilder中以出现在JLabel中时遇到麻烦。
我发现这里解决了一些类似的问题,例如[here]在JLabel中使用int换行的问题,以及[here]如何为除最后一行以外的所有行附加换行符? ,还有其他几个,但似乎没有一个适合我。
当打印到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("
");
memLocList[i] = null;
mList.append("Memory location:" + i +"" + memLocList[i] +"
");
}
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);
再次感谢大家。
JLabel中Newline的可能重复项
您可以看一下本教程:
http://docs.oracle.com/javase/tutorial/uiswing/components/html.html
示例之一是使用html使其成为JButton文本的两行。它应该非常相似。
谢谢,现在就读。
JLabel未指定为保留多行文档,有两种选择(默认情况下通过接受换行符或制表符)
如果无法以某种方式装饰或设置文档样式,请使用JTextArea
如果可以用某种方式修饰或设置文档样式,则可以使用JEditorPane或JTextPane
谢谢mKorbel,我将其更改为JTextpane,现在可以正确格式化。 非常感激。
别客气
顺便说一句,尽管此方法非常有效,但需要一段时间才能启动。 有更有效的方法吗? (没有明显的"不要使用Java"。)
所有编程语言都加上了相同的start_up,再加上减去citibus,
通过将文本包装在HTML标记中并使用br标记添加新行,可以使JLabel具有多行。
如果您要新闻自动包装,建议您使用JTexrArea。您可以使其无法编辑并设置样式,使其看起来像标签。
如果您绝对必须使用JLabel,那么我建议每行使用一个。
您将必须使用并在JLabel Swing组件中获得换行符。
谢谢吉尔伯特,我已经尝试过使用它:mList.append(" 内存位置:" + i +"" + memLocList [i] +" html>"); 但也没有运气。
@罗伯特:也许我不明白你写的是什么,但是休息后你没有文字。
// @吉尔伯特:对不起,我的补充评论不是很清楚。 它是循环的一部分,我希望在每次迭代后都换行。
@罗伯特:好的。 正如您所评论的,JTextPane更适合您的需求。