gpt4 book ai didi

java - 跳转到 JEditorPane 中的内部 anchor

转载 作者:搜寻专家 更新时间:2023-11-01 01:35:54 25 4
gpt4 key购买 nike

我有一个问题:我想使用内部 anchor <a name="x">和链接 <a href="#x">在 JEditorPane 中。

Pane 的内容不是从资源中加载的,而是动态创建的并且可以作为字符串使用。

如何让我的 JEditorPane 滚动到正确的位置? (在示例中它应该滚动到顶部)监听器仅捕获 null,这增加了问题。

这是我的 SSCCCE:

public static void main(final String[] args) {
final JFrame f = new JFrame();
f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
f.setTitle("JEditorPane Test");

final String text = "<html><body><a name='link1'>test</a>some text<br /><br /><br /><br /><br /><br /><br /><br /><br /><br />some more text<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />some more text<a href='#link1'>jump to top</a></body></html>";

final JEditorPane ep = new JEditorPane();
ep.setContentType("text/html");
ep.setText(text);
ep.setEditable(false);
ep.addHyperlinkListener(new HyperlinkListener() {
@Override public void hyperlinkUpdate(final HyperlinkEvent pE) {
if (HyperlinkEvent.EventType.ACTIVATED == pE.getEventType())
System.out.println("ep link click: " + pE.getURL());
}
});

final JScrollPane sp = new JScrollPane(ep);
f.add(sp);

f.setBounds(200, 200, 400, 400);
f.setVisible(true);
}

最佳答案

好吧,我终于解决了这个问题。

我一直在使用 scrollToReference() 进行测试,但不知何故它不起作用。然后我玩了 HTML 解析和 anchor 和插入符以及 setCaretPosition() ,这只是有时有效。然后出于纯粹的巧合,我在我的代码中再次包含了 scrollToReference() 并且滚动突然起作用了......而且仍然完美无缺!

这是工作代码:

public static void main(final String[] args) {
final JFrame f = new JFrame();
f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
f.setTitle("JEditorPane Test");

final String text = "<html><body><a name='link1'>test</a>some text<br /><a href='#thisisbottom'>down</a><br /><br /><br /><br /><br /><br /><br /><br /><br /><a name='mid1'></a>some more text<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />some more text [<a href='#link1'>jump to top</a>] <br /> or jump to <a name='thisisbottom' href='#mid1'>center</a></body></html>";

final JEditorPane ep = new JEditorPane();
ep.setContentType("text/html");
ep.setText(text);
ep.setEditable(false);
ep.addHyperlinkListener(new HyperlinkListener() {
@Override public void hyperlinkUpdate(final HyperlinkEvent pE) {
if (HyperlinkEvent.EventType.ACTIVATED == pE.getEventType()) {
System.out.println("JEditorPane link click: url='" + pE.getURL() + "' description='" + pE.getDescription() + "'");
String reference = pE.getDescription();
if (reference != null && reference.startsWith("#")) { // link must start with # to be internal reference
reference = reference.substring(1);
ep.scrollToReference(reference);
}
}
}
});

final JScrollPane sp = new JScrollPane(ep);
f.add(sp);

f.setBounds(200, 200, 400, 400);
f.setVisible(true);
}

关于java - 跳转到 JEditorPane 中的内部 anchor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14054601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com