【问题标题】:JScrollPane scrollbar jumps down on JEditorPane.setText()JScrollPane 滚动条在 JEditorPane.setText() 上跳下
【发布时间】:2012-07-02 17:31:48
【问题描述】:

每次(除了第一次)我在 JEditorPane 滚动条中设置的文本都会跳到 JEditorPane 的底部。有没有办法避免这种情况?我尝试的一种方法是在 setText() 之后使用 setCaretPosition(0)。它有效,但不完全是我需要的。滚动条向下跳,然后向上跳。有没有办法避免 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");

    }

}

【问题讨论】:

标签: java swing jscrollpane jeditorpane


【解决方案1】:

经过 50 分钟的绝望后,以下内容为我解决了问题:

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

【讨论】:

    【解决方案2】:

    有不同的方法可以解决这个问题。一种是简单地避免插入符号可见性调整,如下所示:

    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();
                }
            });
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-09-03
      • 1970-01-01
      • 2010-11-13
      • 2011-05-20
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多