【问题标题】:Confusion regarding JTextArea and newline character关于 JTextArea 和换行符的困惑
【发布时间】:2014-03-22 17:45:55
【问题描述】:

我对 JTextArea 如何处理换行符感到有些困惑。我在 JScrollPane 对象中有一个 JTextArea。

JScrollPane scrollPane4 = new JScrollPane();
scrollPane4.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane4.setBounds(66, 155, 474, 133);
getContentPane().add(scrollPane4);

postingArea = new JTextArea();
postingArea.setMaximumSize(new Dimension(470, 200));
postingArea.setLineWrap(true);
postingArea.setBorder(border);
postingArea.setLineWrap(true);
postingArea.setWrapStyleWord(true);

scrollPane4.setViewportView(postingArea);

文本区域用于收集用户的输入并发布到 SQL 数据库。该字符串可以从数据库中读取,并在其他时间重新显示在单独的网页上。当用户输入文本时,该行会换行,但是,输入到数据库中的是一个长字符串。因此,重新显示的是一个带有水平滚动条的长字符串。有没有办法让我通过事件处理程序在文本中的适当位置添加换行符?或者,我是否只是通知用户在他们想要换行时按“Enter”?

【问题讨论】:

  • 不要在 layoutManagers 中使用 setBounds 依赖,我会使用另一个带有 rows 和 columns 的 JTextArea 构造函数
  • @nachokk 但是,您的建议是否解决了我遇到的问题。或者,这是您的偏好吗?
  • scrollPane4.setBounds(66, 155, 474, 133); Java GUI 可能必须在多个平台、不同的屏幕分辨率和使用不同的 PLAF 上工作。因此,它们不利于组件的精确放置。要组织组件以获得强大的 GUI,请改为使用布局管理器或 combinations of them,以及 white space 的布局填充和边框。在您问“或者,这是您的偏好吗?” 再次阅读粗体部分。

标签: java swing newline jscrollpane jtextarea


【解决方案1】:

我没有看到您的TextArea 被添加到您的ScrollPane 中的哪个位置。如果它真的被添加,代码应该是这样的:

JScrollPane scrollPane4 = new JScrollPane(postingArea);

并将您的 TextArea 设置为:

JTextArea postingArea = new JTextArea(ROWS, COLUMNS); 

其中 ROWS 和 COLUMNS 是整数,指定 TextArea 中的行数和列数。

并且不要使用setBounds() 方法,而是依靠LayoutManager 来完成@nachokk 所说的工作。这不是一种偏好,而是一种良好的做法。此外,由于 LayoutManager 将完成其工作,无论您设置组件的边界,如果您 LayoutManager 不考虑自定义边界参数,它将自行计算,这就是您遇到问题的原因。

您的代码的其余部分看起来不错。

【讨论】:

  • 很抱歉给您带来了困惑。我留下了一行代码,只是编辑了帖子。
  • 好的,所以在您的代码中,您尝试设置 textArea 的最大大小。您是否尝试过setPreferredSize 和setMinimumSize 方法?因为然后布局管理器将确认这些值并正确显示嵌入在滚动窗格中的文本区域。试试看,让我们知道。
  • 我为 JTextArea 尝试了 setPreferredSize 和 setMinimumSize。我也没有提到我正在使用 Swing (GUI) 设计器来更改属性。我不知道这是否重要。但是,在更改值之后,我仍然会收到一长串文本发布到我的数据库中。
  • 啊,我现在明白了,你的数据库中有一个很长的字符串,因为文本区域中的文本换行只是视觉换行。它与文本区域保存的实际字符串无关。是的,您可以在字符串中的适当位置添加换行符\n,以真正在字符串中添加一些新行,然后可以将其发布到您的数据库中。如果您让我知道每行最多应包含多少个字符,我可以帮助您创建这样的方法,以便我可以编写一个方法,通过向其添加新行字符来修改您的字符串。
  • 但我怀疑您的数据库是否会将行分隔符视为您所看到的视图中的换行符。如果它适当地考虑行分隔符,那么添加适当行分隔符的方法将有它的用途,否则它也不会解决问题。
【解决方案2】:

我已经使用Utilities class 解决了这个问题。特别是,我在循环中调用 getRowEnd () 以确定 JTextArea 中行的逻辑结尾(例如,自动换行的点)。然后我在那个时候插入了字符串<br>。更新后的字符串随后被插入到 SQL 数据库中,随后被检索并显示在另一个页面上。文本显示正确,并带有适当的换行符。

【讨论】:

    猜你喜欢
    • 2014-10-30
    • 2011-12-13
    • 2017-12-04
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多