2

可能重复:
JTextArea 中的行

在 JTextArea 中,select、highlight 等操作似乎都依赖于与文本开头的偏移量。在显示面向行的文本的应用程序中,我需要根据行和列选择、突出显示(基于其他地方的信息,而不是插入符号)。

是否有一些内置的功能,或者在一些帮助类中,可以从 row,col 中获取偏移量?我意识到我可以在行起始偏移等上维护单独的数据并计算行,col--> 偏移,但肯定 JTextArea(或其模型)已经知道这一点以便显示文本,所以我相信必须已经一种方法来做到这一点。

我确实看到了使用类似这样的示例使用 textarea.viewToModel(new Point(x,y));,其中 x 和 y 据称是 row,col,但据我所知,x 和 y 是像素坐标,而不是行,列...所以不知道该怎么做。

线索?谢谢!

已编辑:因此,在五位评论者认为这是其他问题的重复问题的印象下,该问题已关闭,但事实并非如此。我没有问如何将偏移量转换为行、列,也没有问如何将屏幕像素坐标转换为偏移量,这些都是其他文章中涉及的主题。

万一其他人在这里偶然发现我实际提出的问题的答案,我现在发现它如下。

JTextArea 具有我期望找到的功能,但在早期浏览中显然被忽略了:getLineStartOffset(int line) 它将为特定的文本行(行)提供从文本开始的偏移量。对此可以轻松添加 char-posn-in-line,从而得出特定字符的偏移量。

4

2 回答 2

2

textArea 包含一个文本流。没有什么神奇的方法可以在您的文本模型中定位行/列,因为如果您的文本包含可变宽度字符或不同的字体大小,这可能会模棱两可。 必须维护必要的数据,以便根据对特定(行、列)对数据的意义的想法进行映射。

于 2012-11-20T03:01:36.553 回答
2

这是矩形片段选择的简单示例http://java-sl.com/tip_vertical_selection.html

您可以使用 javax.swing.text.Utilities.getRowStart()/getRowEnd() 方法。首先找到行号的起始行偏移量。然后只需添加 col 编号即可获得偏移量。

于 2012-11-20T05:59:17.077 回答