2012-04-30 101 views
1

我正在渲染一個網頁並嘗試滾動到其中的一個位置。但是,滾動不起作用。滾動到網頁的其他部分

這是我的代碼...

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

您是否收到任何異常?你有沒有確認您運行'()'代碼工作(如調試它,或寫出來的消息日誌或控制檯?) – wattostudios

+0

@WATTOStudios也不例外,run()方法是工作的原因,如果我[把其他功能有它的工作,但在一個我需要 – lonesome

回答

0

在我看來,就好像要傳遞到顯示方法的節點是不是由HtmlPanel正在瀏覽的文件內。在你的代碼生成使用的文檔:

Document document = builder.parse(is); 

這將創建一個新的文檔和很多與之相關的新節點。由於它是在文檔創建之前創建的,所以參數theFinalNode不會成爲此文檔的一部分。您需要,或者使用類似的XPath通過調用文檔對象的方法來提取您從您的新文檔所需的節點:

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

一旦你有一個節點,它實際上是在查看文檔的一部分那麼scrollTo方法應該可以工作。

+0

是的,我對它也有疑慮後,讀取API我意識到它取決於文檔,我可能會發送文檔,我從它的finallNode它的功能,然後將其替換爲您提到的行,使它像這樣* * htmlPanel.setDocument(doc.getOwnerDocument(),rendererContext)**哪個doc是最終節點是由它產生的DOM的根節點,但是我的互聯網有一些問題,所以我必須稍後檢查我的更改,並感謝製作我肯定關於文件的事情:)希望這一次它的工作 – lonesome

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);,它應該能夠滾動到這個位置。

+0

還是一樣的,奇怪的是,當我使用它使用座標X的其他mjethod TTO卷軸,和Y是語言,而是採用利用節點的方法時要滾動它不,是什麼可能是錯的? – lonesome

+0

兩種可能性立即跳入腦海。 1.也許'scrollTo(goTo)'在'JFrame'顯示之前沒有運行,或者至少在'JFrame'佈局之前不運行。也許嘗試將'scrollTo(goTo)'放在單獨的'Thread'中,或者可以在'scrollTo(goTo)'之前嘗試'Thread.sleep(5000);'。 2.另一種可能性是'Node goTo'沒有值,或者不在文檔中? – wattostudios

+0

IM確保該節點的值我檢查bfore其發送到功能......讓我們嘗試Thread.sleep代碼 – lonesome