如何将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中部分字符串的矩形呢?

最佳答案

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

myScrollPane.getVerticalScrollBar().setValue()


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

完成后,您可以通过将行索引乘以编辑器高度乘以行数,将行索引转换为编辑器Y位置,并进行相应设置。

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


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

关于java - 更改JScrollPane的 View ,以便可见JEditorPane的特定部分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55463022/

10-10 05:08