更改JScrollPane的视图,以使JEditorPane的特定部分可见

时间:2019-04-01 20:22:47

标签: java jscrollpane jeditorpane

当jEditorPane在JScrollPane中时,如何使其可见?

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

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

getMyString获取一个长字符串,其中包含多行,以\ n分隔。 该程序有2个面板。然后,该程序在上面的面板中的各行中向下移动,并且每个人在该行中的文本下划线并在另一面板中显示相关图像。每次观看1秒钟,然后继续在下一行文本下划线并显示下一张图像。我将其记下并依次加下划线,为每行带下划线的文本显示相关图像。但是每次滚动窗格都会跳到起点。

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

1 个答案:

答案 0 :(得分:1)

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

{'Server': 'nginx/1.10.3 (Ubuntu)', 'Date': 'Mon, 01 Apr 2019 21:03:28 GMT', 'Content-Type': 'text/html', 'Last-Modified': 'Mon, 25 Mar 2019 21:25:01 GMT', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'ETag': 'W/"5c99472d-806"', 'Strict-Transport-Security': 'max-age=63072000; includeSubdomains', 'X-Frame-Options': 'DENY', 'X-Content-Type-Options': 'nosniff', 'Content-Encoding': 'gzip'}

问题是,要设置什么值?您可以假定文本行是相同的吗?如果它们包起来,事情将变得复杂。我将假设它们不是,并且每行的高度是相同的,因为字体和大小是相同的。然后,您需要知道当前显示的行是什么索引,以及行的总数。

一旦知道了,就可以通过将行索引乘以编辑器高度乘以行数,将行索引转换为编辑器Y位置,并进行相应设置。

myScrollPane.getVerticalScrollBar().setValue()

很明显,没有SSCCE,就无法测试任何一个。