Прокрутка до другой части веб-страницы

Я отрисовываю веб-страницу и пытаюсь прокрутить ее до нужного места. Однако прокрутка не работает.

Это мой код...

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);
        }
    });

}

Может кто-нибудь, пожалуйста, помогите мне понять, почему прокрутка не работает.

2 ответа

Решение

Мне кажется, что узел, который вы передаете методу show, отсутствует в документе, просматриваемом HtmlPanel. В своем коде вы строите документ, используя:

Document document = builder.parse(is);

Это создаст новый документ и множество новых узлов, связанных с ним. Параметр theFinalNode не будет частью этого документа, так как он был создан до создания документа. Вам нужно будет извлечь нужный узел из вашего нового документа, вызвав методы для объекта документа или используя что-то вроде XPath:

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

Если у вас есть узел, который фактически является частью просматриваемого документа, тогда метод scrollTo должен работать.

Я думаю, может быть, это не прокрутка, потому что ваш HtmlPanel не добавляется в графический интерфейс 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); выполняется позже, он должен иметь возможность прокрутки до этого места.

Другие вопросы по тегам