我正在渲染网页并尝试滚动到其中的某个位置。但是,滚动不起作用。
这是我的代码......
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);
}
});
}
有人可以帮我理解为什么滚动不起作用。
答案 0 :(得分:0)
我认为可能不会滚动,因为HtmlPanel
未在JScrollPane
内添加到GUI中。尝试更改以下代码......
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);
时,它应该可以滚动到此位置。
答案 1 :(得分:0)
在我看来,您传递给show方法的Node不在HtmlPanel正在查看的文档中。在您的代码中,您使用以下命令构建文档:
Document document = builder.parse(is);
这将创建一个新文档和许多与之关联的新节点。参数theFinalNode将不是此文档的一部分,因为它是在创建文档之前创建的。您需要通过调用文档对象上的方法或使用类似XPath的方法从新文档中提取所需的节点:
http://www.roseindia.net/tutorials/xPath/java-xpath.shtml
一旦你有一个实际上是被查看文档的一部分的节点,那么scrollTo方法应该可以工作。