【问题标题】:JTextPane autoscroll works only one time [closed]JTextPane 自动滚动只工作一次[关闭]
【发布时间】:2014-06-19 10:03:31
【问题描述】:

我有两个 JTextPane 并将它们全部设置为垂直自动滚动,但由于某种原因,我不明白只有一个在工作。

可能是什么原因?

    JTextPane textA = new JTextPane();
    textA.setName(text);
    textA.setContentType("text/html");
    DefaultCaret caret = (DefaultCaret)textA.getCaret();
    caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
    JScrollPane filler = new JScrollPane (textA, 
    JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

    JTextPane textB = new JTextPane();
    textB.setName(text + "_T");
    textB.setFont(textA.getFont());
    DefaultCaret caret_T = (DefaultCaret)textB.getCaret();
    caret_T.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
    JScrollPane filler_T = new JScrollPane (textB, 
    JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    panel.add(filler); panel.add(filler_T);

filler_T (textB) 是唯一有效的

【问题讨论】:

    标签: java swing jscrollpane jtextpane autoscroll


    【解决方案1】:

    您的panel 没有使用任何布局。所以 JScrollPane filler_T 被放在 JScrollPane filler 上,所以 JTextPane textA 不可见。

    使用布局,例如在代码中添加以下行:

    panel.setLayout(new BorderLayout(0, 0));
    panel.add(filler,BorderLayout.NORTH); 
    panel.add(filler_T,BorderLayout.CENTER);
    

    您的窗口将如下所示:

    完整运行代码:

    import java.awt.BorderLayout;
    import java.awt.EventQueue;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextPane;
    import javax.swing.border.EmptyBorder;
    import javax.swing.text.DefaultCaret;
    
    public class TestScroll extends JFrame {
    
        private JPanel panel;
    
    
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        TestScroll frame = new TestScroll();
                        frame.setVisible(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    
    
        public TestScroll() {
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            panel = new JPanel();
            panel.setBorder(new EmptyBorder(5, 5, 5, 5));
            panel.setLayout(new BorderLayout(0, 0));
            setContentPane(panel);
    
    
    
            JTextPane textA = new JTextPane();
            textA.setName("text");
            textA.setContentType("text/html");
            DefaultCaret caret = (DefaultCaret)textA.getCaret();
            caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
            JScrollPane filler = new JScrollPane (textA, 
            JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    
            JTextPane textB = new JTextPane();
            textB.setName("text" + "_T");
            textB.setFont(textA.getFont());
            DefaultCaret caret_T = (DefaultCaret)textB.getCaret();
            caret_T.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
            JScrollPane filler_T = new JScrollPane (textB, 
            JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
            panel.add(filler,BorderLayout.NORTH); 
            panel.add(filler_T,BorderLayout.CENTER);
    
            pack();
    
        }
    
    }
    

    也为了更好地理解阅读LayoutManagers

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多