2015-09-20 26 views
1
JLabel newLabel = new JLabel(); 
String a = b;//b is String from database. 

newLabel.setText(a); 

我需要从包含多行的数据库中生成文本,但是当我将它们放入标签时,所有文本都变成了同一行。 我尝试过使用JTextArea,但是它的工作原理与其他所有组件的对齐方式在1列的BoxLayout面板中混淆......我希望所有内容都对齐到左侧。任何帮助将非常感激!感谢Java如何保留从String到JLabel的换行符?

+1

此问题最初被标记为以下副本:http://stackoverflow.com/questions/685521/multiline-text-in-jlabel。该帖子中的所有解决方案都建议使用HTML。 OP声明使用JTextArea可行,但问题现在与BoxLayout的对齐问题。我已经重新解决了这个问题以解决对齐问题。 – camickr

+0

嗨,感谢您的回复,我不想使用HTML,因为所有的字符串都是从用户输入文本字段生成的,并由系统自动显示,所以如果我要使用HTML,我将需要读取整个字符串并全部替换新行
并添加html的开头和结尾,其中我不知道什么是指示文本字段中的换行符。 –

回答

1

然而,由于某种原因,在1列的BoxLayout面板

与所有其他组件的对准的混乱是有关各组分的方法setAlignmentX(...)

JLabel使用0.0f(用于左对齐)。 JTextArea和JScrollPane使用0.5f(用于中心对齐)。

使用BoxLayout时,使用具有不同对齐方式的组件会导致对齐问题。

解决方案是更改文本区域或滚动窗格(无论添加到BoxLayout的哪个组件)的对齐方式。

所以基本的代码如下:

JLabel label = new JLabel(...); 
JTextArea textArea = new JTextArea(...); 
textArea.setAlignmentX(0.0f); 
JPanel panel = new BoxLayout(...); 
panel.add(label); 
panel.add(textArea); 

现在,这两个组件将被左对齐。

+0

嘿thx!这解决了我的问题!我之前尝试过这个解决方案,但是我没有改变textArea的对齐方式,而是试图改变其他组件的对齐方式,而不是像我看到的那样,它是另一个组件的对齐方式!非常感谢! –

相关问题