1

Webページをレンダリングして、その中の場所にスクロールしようとしています。ただし、スクロールは機能しません。

これは私のコードです...

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

}

スクロールが機能しない理由を誰かが理解するのを手伝ってくれませんか。

4

2 に答える 2

0

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);この場所までスクロールできるはずです。

于 2012-04-30T12:38:24.003 に答える
0

showメソッドに渡したノードが、HtmlPanelによって表示されているドキュメントに含まれていないように見えます。コードでは、以下を使用してドキュメントを作成します。

Document document = builder.parse(is);

これにより、新しいドキュメントとそれに関連付けられた多くの新しいノードが作成されます。パラメータtheFinalNodeは、ドキュメントが作成される前に作成されたため、このドキュメントの一部にはなりません。ドキュメントオブジェクトのメソッドを呼び出すか、XPathのようなものを使用して、新しいドキュメントから必要なノードを抽出する必要があります。

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

表示されたドキュメントの一部であるノードができたら、scrollToメソッドが機能するはずです。

于 2012-05-02T10:06:55.723 に答える