Java 关于JTextArea和换行符的混淆

Java 关于JTextArea和换行符的混淆,java,swing,newline,jscrollpane,jtextarea,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(

我对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数据库。该字符串可以从数据库中读取,并在另一时间在单独的网页上重新显示。当用户输入文本时,行会自动换行,但是,输入数据库的是一个长字符串。因此,重新显示的是一个带有水平滚动条的长字符串。有没有办法通过事件处理程序在文本中的适当位置添加换行符?或者,当用户需要新行时,我是否只是通知用户按“回车”键?

我看不出您的
文本区域在
滚动窗格中的添加位置。如果它真的被添加了,代码应该是这样的:

JScrollPane scrollPane4 = new JScrollPane(postingArea);
并将您的文本区域设置为:

JTextArea postingArea = new JTextArea(ROWS, COLUMNS); 
其中,行和列是整数,指定TextArea中的行数和列数

不要使用
setBounds()
方法,而是依靠
LayoutManager
来完成@nachokk所说的工作。这不是一种偏好,而是良好的实践。此外,由于LayOutMeor将完成它的工作,不管您设置组件的边界,如果LayOutMeor不考虑自定义边界参数,它将单独计算它,这就是为什么您有这个问题。
您的其余代码看起来很好。

我已经通过使用解决了这个问题。特别是,我在循环中调用getRowEnd()来确定JTextArea中行的逻辑端点(例如换行点)。然后,我在该点插入了字符串

。然后将更新的字符串插入到SQL数据库中,随后检索并显示在另一个页面上。文本以正确的换行符正确显示。

不要在布局管理器中使用
setBounds
reland,我会使用另一个具有
@nachokk的JTextArea构造函数,但是,您的建议解决了我遇到的问题吗。或者,这是你的偏好吗?
scrollPane4.setBounds(66155474133)javagui可能必须在许多平台上工作,在不同的屏幕分辨率上&使用不同的plaf。因此,它们不利于部件的精确放置。要为健壮的GUI组织组件,请改为使用布局管理器,或者与布局填充和边框一起使用。在你问“或者,这是你的偏好吗?”之前,请再次阅读粗体部分。很抱歉造成混淆。我留下了一行代码,刚刚编辑了这篇文章。好吧,在你的代码中,你试图设置文本区域的最大大小。您是否尝试了
setPreferredSize
setMinimumSize
方法?因为布局管理器将确认这些值,并正确显示嵌入滚动窗格中的文本区域。尝试一下,让我们知道。我为JTextArea同时尝试了setPreferredSize和setMinimumSize。我还忽略了提到我正在使用Swing(GUI)设计器来更改属性。我不知道这是否重要。但是,在更改了值之后,我仍然会收到一个长字符串的文本发布到我的数据库中。啊,我现在知道了,您的数据库中会收到一个大的长字符串,因为文本区域中文本的换行只是视觉换行。它与文本区域保存的实际字符串无关。是的,您可以在字符串中的适当位置添加换行符
\n
,以便在字符串中真正添加一些新行,然后可以将这些新行发布到数据库中。我可以帮助你创建这样的方法,如果你让我知道每行应该有多少个字符,这样我就可以写一个方法来修改你的字符串,通过添加新的行字符给它。但是我怀疑你的数据库是否会将行分隔符视为你看到的视图中的换行符。如果它适当地考虑行分隔符,那么添加适当行分隔符的方法将有其用途,否则它也无法解决问题。