【问题标题】:Line wraped JTextArea Java换行的 JTextArea Java
【发布时间】:2017-04-21 13:19:31
【问题描述】:

我有一个固定大小的JTextArea,并且允许JTextArea 换行。

我试图在JTextArea 换行之前得到最后一个字。

有没有办法得到它?

我已经尝试使用lineCount()getStartOffset()getEndOffset()getRows()。我知道我的文本有多长,它有多少个字符。 lineCount 总是return 1

我正在考虑更改以获取JTextArea 的可能字符长度,或者在字符串中查找中断信息,但没有方法。

有人想得到它吗?

【问题讨论】:

标签: java jtextarea line-breaks word-wrap line-count


【解决方案1】:

这里有一些未经测试的代码可以给你一个想法。

既然你知道文本区域的大小,你可以使用文本区域的模型/视图方法来获取文本。

int width = textArea.getSize().width;
int height = textArea.modelToView(0).height / 2;
int offset = textArea.viewToModel( new Point(width, height) );
int start = Utilities.getPreviousWord( offset );  // or maybe getWordStart(...)?
int end = Utilitities.getWordEnd( start );
String text = textArea.getText(start, end - start);

【讨论】:

  • 这行得通,谢谢 :) 但这仅适用于第一行,如果我没看错的话?我是否必须更改 int height = textArea.modelToView(0).height / 2;到 int 高度 = textArea.modelToView(0).height / 3;当我有更多行时?
  • modelToView(...) 方法中返回的 Rectangle 的高度将为您提供一条线的高度。因此,您可以乘以行号来获得适当的 y 值。
【解决方案2】:

用空格字符分割你的字符串,然后找到数组的最后一个元素。一个简单的例子:

String myString = "foo bar foo bar";
String[] stuff = myString.split(" ");
String last = stuff[stuff.length-1];

“last”字符串的结果将是“bar”。

编辑:如果您在查找断点字符时遇到问题,下面评论中提供的链接也应该会有所帮助:How to get line-wrapped text from JTextArea into multiple line-seperated Strings

【讨论】:

  • 可能不会工作,因为整个字符串是 1 行,即使它得到一个可见的换行符
  • @XtremeBaumer 视觉中断仍然必须是某种换行符。如果您暗示 nextLine() 不起作用,则用换行符分割整个大字符串,然后用空格分割那些较小的字符串。没什么大不了的,只是多了一层分裂而已。
  • here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多