JScrollPane和JList自动滚动


问题内容

我有下一个代码:

    listModel = new DefaultListModel();
    listModel.addElement(dateFormat.format(new Date()) + ": Msg1");
    messageList = new JList(listModel);
    messageList.setLayoutOrientation(JList.VERTICAL);

    messageScrollList = new JScrollPane(messageList);
    messageScrollList.setPreferredSize(new Dimension(500, 200));

    messageScrollList.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {  
        public void adjustmentValueChanged(AdjustmentEvent e) {  
            e.getAdjustable().setValue(e.getAdjustable().getMaximum());  
        }
    });

自动向下滚动。但是,如果我尝试向上滚动以重新阅读消息,则会强制向下滚动。我怎样才能解决这个问题?


问题答案:

添加新邮件时,使用尺寸与邮件窗格的首选大小相同scrollRectToVisible()JList进行调用Rectangle。给定垂直取向,它可方便地使的优选尺寸JScrollPaneJViewport邮件面板的高度的整数倍。另请参阅:
如何使用滚动窗格


附录:有关 文本区域滚动的 引人入胜的讨论也可能会有所帮助。