关于JTextArea和换行符的混淆

时间:2014-03-22 17:45:55

标签: java swing newline jscrollpane jtextarea

我对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”?

2 个答案:

答案 0 :(得分:1)

我看不到您TextAreaScrollPane的添加位置。如果它真的被添加,代码看起来像:

JScrollPane scrollPane4 = new JScrollPane(postingArea);

将TextArea设为:

JTextArea postingArea = new JTextArea(ROWS, COLUMNS); 

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

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

其余代码看起来很好。

答案 1 :(得分:0)

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