滚动至网页的另一部分(Scrolling to the other part of the webp

2019-10-16 15:35发布

我在渲染网页,并试图滚动到内它的位置。 然而,滚动不起作用。

这是我的代码...

import org.lobobrowser.html.*;
import org.lobobrowser.html.gui.HtmlPanel;
import org.lobobrowser.html.parser.*;
import org.lobobrowser.html.test.*;
import org.w3c.dom.*;
import org.xml.sax.*;

public class finall {

    Node goTo;


    public void show(URL url,Node theFinalNode) throws MalformedURLException, IOException, SAXException {
        goTo = theFinalNode;
        String uri=url.toString(); 

        URLConnection connection = url.openConnection();
        InputStream in = connection.getInputStream();
        Reader reader = new InputStreamReader(in);
        InputSource is = new InputSourceImpl(reader, uri);
        UserAgentContext uAgent=new SimpleUserAgentContext();

        final HtmlPanel htmlPanel = new HtmlPanel();
        HtmlRendererContext rendererContext = (HtmlRendererContext) new LocalHtmlRendererContext(htmlPanel, uAgent);
        DocumentBuilderImpl builder = new DocumentBuilderImpl(uAgent, rendererContext);
        Document document = builder.parse(is);

        JFrame frame = new JFrame();
        frame.getContentPane().add(htmlPanel);
        htmlPanel.setDocument(document, rendererContext);
        frame.setSize(300, 450);
        frame.setVisible(true);

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
            htmlPanel.scrollTo(goTo);
        }
    });

}

可能有人请帮助我理解为什么滚动不起作用。

Answer 1:

在我看来,就好像要传递到显示方法的节点不是文档中由HtmlPanel观看。 在你的代码生成使用的文档:

Document document = builder.parse(is);

这将创建一个新的文档和很多与之相关的新节点。 参数theFinalNode不会是这个文件的一部分,因为它创建文档之前创建。 您将需要通过调用文档对象的方法,或者使用类似XPath来提取您从您的新文档所需的节点:

http://www.roseindia.net/tutorials/xPath/java-xpath.shtml

一旦你有一个节点,它实际上是在查看文档的一部分,那么该scrollTo方法应该工作。



Answer 2:

我想,也许它不是滚动,因为你HtmlPanel不添加到内的GUI JScrollPane 。 尝试改变下面的代码...

JFrame frame = new JFrame();
frame.add(new JScrollPane(htmlPanel)); // CHANGED LINE HERE
htmlPanel.setDocument(document, rendererContext);
// Set the size of the JFrame when the root
// component does not have a preferred size.
frame.setSize(300, 450);
frame.setVisible(true);

现在,当你htmlPanel.scrollTo(goTo); 以后执行的,它应该能够滚动到这个位置。



文章来源: Scrolling to the other part of the webpage