更改JScrollPane的视图,以便可以看到JEditorPane的某个部分

问题描述 投票:1回答:1

当它在JScrollPane中时,如何在jEditorPane中显示某行文本?

private JEditorPane myEditorPane = new JEditorPane();
private JScrollPane myScrollPane = new JScrollPane(myEditorPane);

myEditorPane.setContentType("text/html");
myEditorPane.setText("<html>" + getMyString(x) + "</html>");
myEditorPane.repaint();

getMyString获取一个包含多行的长String,用\ n分隔。该计划有2个小组。然后程序在上面的面板中向下划线,每个面板都会在该行中强调文本,并在另一个面板中显示相关图像。每个被观看1秒钟然后继续下划线下一行文字并显示下一个图像。我已经让它下降并依次强调它们,为每个带下划线的文本显示相关图像。但滚动窗格每次都会跳到开头。

我想我必须在视口上使用scrollRectToVisible,但是如何找到JEditorPAne中字符串部分的矩形?

java jscrollpane jeditorpane
1个回答
1
投票

我已经能够通过直接调用滚动条上的setValue来操纵滚动条位置。

myScrollPane.getVerticalScrollBar().setValue()

问题是,要设定什么价值?你能假设文本行是一样的吗?如果他们换行,事情会变得复杂。我假设它们没有,并且每条线的高度是相同的,因为字体和大小是相同的。然后,您需要知道当前显示的行的索引以及行的总数。

一旦你有了这个,你可以通过将行索引乘以编辑器高度超过行数来将行索引转换为编辑器Y位置并相应地进行设置。

myScrollPane.getVerticalScrollBar().setValue( (int) indexOfCurrentLine * myEditorPane.getHeight() / countOfLines );

如果没有SSCCE,显然无法测试任何一项。

© www.soinside.com 2019 - 2024. All rights reserved.