2012-07-02 102 views
1

每次(第一次除外)我在JEditorPane滚动条中设置文本跳转到JEditorPane的底部。有什么办法可以避免这种情况?我尝试的一种方法是在setText()之后使用setCaretPosition(0)。它的作品,但它不是我所需要的。滚动条跳下来然后跳起来。有没有办法避免在settext()中移动滚动条?JScrollPane滚动条跳到JEditorPane.setText()

我的代码:

package test; 

import javax.swing.JApplet; 
import javax.swing.JButton; 
import javax.swing.JEditorPane; 
import javax.swing.JScrollPane; 
import javax.swing.event.HyperlinkEvent; 
import javax.swing.event.HyperlinkListener; 

public class Test extends JApplet implements HyperlinkListener { 

    JEditorPane dataDisplayer = new JEditorPane(); 

    public void init() { 
     ataDisplayer.setEditable(false); 
     dataDisplayer.add(new JButton()); 
     dataDisplayer.setContentType("text/html"); 
     JScrollPane jsp = new JScrollPane(dataDisplayer); 
     dataDisplayer.setText("<a href=''>Change Text</a><br><br><br><br><br><br><br><br><br><br>bla"); 
     this.dataDisplayer.addHyperlinkListener(this); 
     setContentPane(jsp); 
    } 

    @Override 
    public void hyperlinkUpdate(HyperlinkEvent arg0) { 
     dataDisplayer.setText("<a href=''>Change Text</a><br><br><br><br><br><br><br><br><br><br>bla bla"); 

    } 

} 
+0

参见本[另类](HTTP:/ /stackoverflow.com/a/11299764/230513)。 – trashgod

回答

7

有不同的方法去与这一点。一个是简单地避免尖知名度adjustement,像这样:

import java.awt.Rectangle; 
import javax.swing.JButton; 
import javax.swing.JEditorPane; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.SwingUtilities; 
import javax.swing.event.HyperlinkEvent; 
import javax.swing.event.HyperlinkListener; 
import javax.swing.text.DefaultCaret; 

public class TestEditorPane implements HyperlinkListener { 

    private final class MyCaret extends DefaultCaret { 

     @Override 
     protected void adjustVisibility(Rectangle nloc) { 

     } 

    } 

    JEditorPane dataDisplayer = new JEditorPane(); 
    private MyCaret caret; 

    @Override 
    public void hyperlinkUpdate(HyperlinkEvent arg0) { 
     dataDisplayer.setText("<a href=''>Change Text</a><br><br><br><br><br><br><br><br><br><br>bla bla"); 

    } 

    public void init() { 
     JFrame frame = new JFrame(); 
     dataDisplayer.setEditable(false); 
     caret = new MyCaret(); 
     dataDisplayer.setCaret(caret); 
     dataDisplayer.add(new JButton()); 
     dataDisplayer.setContentType("text/html"); 
     JScrollPane jsp = new JScrollPane(dataDisplayer); 
     dataDisplayer.setText("<a href=''>Change Text</a><br><br><br><br><br><br><br><br><br><br>bla"); 
     this.dataDisplayer.addHyperlinkListener(this); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setContentPane(jsp); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new TestEditorPane().init(); 
      } 
     }); 
    } 
} 
0

下解决了这个问题对我来说,51分钟的绝望后:

JEditorPane.grabFocus(); 
JEditorPane.setCaretPosition(20);