关于 java:同一个 JTextArea 上的多个视口?

Multiple viewports onto the same JTextArea?

我想做一个组件,它显示 JTextArea 中一组单词的所有匹配项,以及一些上下文(N 行,可能是用户可配置的。)

我已经有了高亮匹配的代码,所以我知道它们的偏移量,因此可以确定它们的界限。我知道文本的行高,因此我可以确定要绘制的上下文区域的边界。

但是有像 JViewport 这样的类只能绘制底层组件的多个视图吗?由于 JViewport 是一个普通的 Swing 组件,一旦您将相同的文本区域放在另一个视口下,它就会与第一个视口分离。

编辑:实际上,事实证明,我似乎无法确定上下文区域的边界,因为 JTextArea 给我的行到偏移映射不计算换行。


这里的问题是JViewport是一个普通的容器,把它的视图组件当作子组件(每个组件只能是一个容器的子组件)。这是相当合理的,因为总是只有一个组件可以拥有焦点,以及类似的事情。

我不知道有任何类似 JViewport 的类可以做你想做的事(绘制一个组件的视图而不是它的父级),但在你的情况下,你可以通过使用两个 JTextAreas 来实现大部分相同共享同一个文档。我认为,您只需要同步插入符号的移动(如果需要)。


在图像中绘制 JTextArea 并使用图像的必要片段。将图像的边界保持在原始 JTextArea 中,因此单击图像可以计算单击 JTextArea 以获得正确的位置。


正如你所描述的那样,没有任何东西存在。事实上,听起来您想自定义 JTextArea 的显示。在这种情况下,您可以覆盖和更改 JTextArea 绘制自身的方式。要么在上面画更多,要么完全改变它。