2012-04-10 79 views
2

我有一個自定義HTML文檔(而不是從URL)一個JScrollPane內,和一個JTextField,使用戶可以輸入隨後將在編輯器窗格中突出顯示的文件的JEditorPane。在文本框的keyPressed事件,我在文檔中搜索文本,與圍繞着它:的Java scrollToReference引起例外的JEditorPane

<a name='spot'><span style='background-color: silver'>my text</span></a> 

突出的背景下,然後將新文本對JEditorPane。這一切正常,但我也想滾動窗格到新突出顯示的文本。因此,在編輯器面板的的DocumentListener的方法的changedUpdate,我補充一下:

pane.scrollToReference("spot"); 

該調用拋出內部BoxView.modelToView一個ArrayIndexOutOfBoundsException。該方法查找文本我的「斑」的提法,但我想,也許鑑於尚未與新的文本尚未更新,所以當它試圖在那裏滾動,它失敗。

我不能去的觀點的引用,我似乎無法找到一個事件偵聽這意味着對JEditorPane的觀點是完全更新。有任何想法嗎?

謝謝,

賈裏德

+0

所有例子從中HTMLEditorKit類型,更好的是用[SSCCE](http:// ssc。)更新你的問題ce.org/)引起的'ArrayIndexOutOfBoundsException' – mKorbel 2012-04-10 16:10:28

+0

我並沒有改變任何一個HTMLEditorKit,所以無論是一個JEditorPane的默認。 – Jared 2012-04-10 16:44:11

+0

沒有SSCCE我無法找到您的問題,抱歉不包括電池,也許一些人可以... – mKorbel 2012-04-10 17:11:08

回答

3

JScrollPane#scrollToReference(java.lang.String reference)談論字符串referennce到URL,

Scrolls the view to the given reference location (that is, the value 
returned by the UL.getRef method for the URL being displayed). 

然後圍繞示出以下解決方法

import java.io.IOException; 
import java.net.URL; 
import javax.swing.JDialog; 
import javax.swing.JEditorPane; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.event.HyperlinkEvent; 
import javax.swing.event.HyperlinkListener; 

public class MyScrollToReference extends JDialog { 
    private static final long serialVersionUID = 1L; 

    public MyScrollToReference(JFrame frame, String title, boolean modal, String urlString) { 
     super(frame, title, modal); 

     try { 
      final URL url = MyScrollToReference.class.getResource(urlString); 
      final JEditorPane htmlPane = new JEditorPane(url); 
      htmlPane.setEditable(false); 
      JScrollPane scrollPane = new JScrollPane(htmlPane); 
      getContentPane().add(scrollPane); 
      htmlPane.addHyperlinkListener(new HyperlinkListener() { 

       public void hyperlinkUpdate(HyperlinkEvent e) { 
        if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { 
         if (e.getURL().sameFile(url)) { 
          try { 
           htmlPane.scrollToReference(e.getURL().getRef()); 
          } catch (Throwable t) { 
           t.printStackTrace(); 
          } 
         } 
        } 
       } 
      }); 
     } catch (IOException e) { 
     } 
    } 
} 
+0

傳遞給方法的參數應該是指「名」的HTML文檔中的錨的屬性。我稱之爲方法的方式不是問題。我知道這是因爲我在調試器中逐步完成了該方法,並且它正確地定位了我的參考錨點。另外,我搜索的參考自己,然後叫scrollRectToVisible,併發生了同樣的錯誤, – Jared 2012-04-10 17:39:48

+0

我幫不了你更多的,從未使用過, – mKorbel 2012-04-10 17:41:29