【问题标题】:Java how to preserve newline from String to JLabel?Java如何保留从String到JLabel的换行符?
【发布时间】:2015-12-17 04:41:12
【问题描述】:
JLabel newLabel = new JLabel();
String a = b;//b is String from database.

newLabel.setText(a);

我需要生成从包含多行的数据库中提取的文本,但是当我将它们放入标签时,所有文本都变成了同一行。 我尝试使用 JTextArea 并且它可以工作,但是,由于某种原因,它与 1 列 BoxLayout 面板中的所有其他组件的对齐方式混淆了......我希望所有内容都向左对齐。任何帮助将非常感激!谢谢

【问题讨论】:

  • 这个问题最初被标记为重复:stackoverflow.com/questions/685521/multiline-text-in-jlabel。该帖子中的所有解决方案都建议使用 HTML。 OP 已声明使用 JTextArea 有效,但问题现在是 BoxLayout 的对齐问题。我已重新提出问题以解决对齐问题。
  • 您好,感谢您的回复,我不想使用 html,因为所有字符串都是从用户输入的文本字段生成并由系统自动显示,所以如果我要使用 html,我需要读取整个字符串并将所有新行替换为
    并添加 html 打开和关闭,其中我不知道文本字段中的换行符是什么。

标签: java string swing newline jlabel


【解决方案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);

现在两个组件都将左对齐。

【讨论】:

  • 嘿,谢谢!这解决了我的问题!我之前尝试过这个解决方案,但是我没有更改 textArea 的对齐方式,而是尝试更改其他组件的对齐方式,因为我看到它是另一个不对齐的组件!非常感谢!
猜你喜欢
  • 2013-09-27
  • 2020-12-04
  • 1970-01-01
  • 2013-04-16
  • 2011-04-16
  • 2021-11-16
  • 2013-05-11
  • 2010-11-13
相关资源
最近更新 更多