【问题标题】:JTextArea: how to translate row, column to offset? [duplicate]JTextArea:如何将行、列转换为偏移量? [复制]
【发布时间】:2012-11-20 02:13:48
【问题描述】:

可能重复:
Rows in JTextArea

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

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

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

线索?谢谢!

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

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

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

【问题讨论】:

  • 另见Q&A中提到的实用程序。
  • 好吧,显然这个问题已经结束,我相信由于误解,我问的是我实际问的相反。我将再次发布并尝试更清晰。
  • ...我想我会跳过重新提出这个问题,因为我现在已经回答了这个问题 - 回答编辑问题以供后代使用。
  • +1 用于改进问题。

标签: java swing offset jtextarea


【解决方案1】:

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

【讨论】:

  • FWIW,我使用“列”来表示“行内的字符位置”。第 10 行第 3 个字符的含义没有歧义,不依赖于字符宽度,也不依赖于字体大小。可以肯定的是,换行会受到字符宽度和字体大小的影响,但是 (a) 我正在处理未换行的文本,并且 (b) 即使在换行时,第 10 行字符 3 的含义仍然是明确的。
【解决方案2】:

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

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

【讨论】:

  • 与预期相反,getRowStart 没有从行索引中找到起始偏移量。然而,事实证明,JTextArea.getLineStartOffset() 确实如此。
  • @gwideman 终于回答了我的问题,我已经挖了一个小时,谢谢
  • 嗯...我刚刚发现 getLineStartOffset() 特别是 没有 找到一行的起始偏移量,而是返回(对我而言)开始line... 的偏移量,如果换行,这不是一回事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 2022-01-09
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多