java - 更改 JScrollPane 的 View ,以便 JEditorPane 的特定部分可见

标签 java swing 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 秒钟,然后继续为下一行文本添加下划线并显示下一张图像。我将其向下并依次在它们下划线,为每个带下划线的文本行显示相关图像。但滚动 Pane 每次都会跳到开头。

我想我必须在视口(viewport)上使用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/

相关文章:

Java Swing API - 两个 JPanel 如何相互通信?

Java Jframe,需要先切换窗 Eloquent 能使用控件

jquery - jScrollPane 向下拖动列表项时向下滚动

java - (架构)为 angular2 应用程序抓取数据。直接检查MongoDB还是我的Java REST?

java - 具有相等元素的 JAX-B 枚举生成

Java 泛型,将所有整数/vector 添加到列表中

java - 使用 Swagger 注释出现意外 token 错误

java - jButtons 在运行时调整大小

java - 当框架最大化时,滚动 Pane 消失

javascript - 如何更改滚动条的颜色