JTextArea:如何将row,column转换为offset?

时间:2012-11-20 02:13:49

标签: java swing offset jtextarea

  

可能重复:
  Rows in JTextArea

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

是否有一些内置的功能,或者在某些帮助器类中,是否可以从row,col中获得偏移?我意识到我可以在线启动偏移等上维护单独的数据并计算row,col - > offset,但是JTextArea(或它的模型)肯定已经知道这个以便显示文本,所以我说服必须已经是一种方法。

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

线索?谢谢!

编辑:因此,在五位评论者的印象中,这个问题已被关闭,这是其他问题的重复,而事实并非如此。我没有询问如何将offset转换为row,col,也没有询问如何将屏幕像素坐标转换为offset,这是其他文章中介绍的主题。

如果其他人偶然发现我在寻找实际问题的答案,我现在发现它如下。

JTextArea具有我期望找到的功能,但在之前的浏览中显然被忽略了:getLineStartOffset(int line),它将为文本的特定行(行)提供文本的偏移量。对于这个,可以很容易地添加char-posn-in-line,从而得到特定字符的偏移量。

2 个答案:

答案 0 :(得分:2)

textArea包含文本流。没有神奇的方法可以在文本模型中找到行/列,因为如果文本包含可变宽度字符或不同的字体大小,则可能不明确。 必须维护必要的数据,以便从 中了解特定(行,列)对您的数据的含义。

答案 1 :(得分:2)

这是矩形片段选择http://java-sl.com/tip_vertical_selection.html

的简单示例

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