2012-07-02 4 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

그와 함께 갈 다른 방법이 있습니다. 하나는 단순히 같이, caret의 가시성 조정이 가능하지 않도록하는 것입니다 :

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

절망의 50 분, 나를 위해 문제를 해결 다음

JEditorPane.grabFocus(); 
JEditorPane.setCaretPosition(20); 
관련 문제