JScrollPane和JList自动滚动

dod*_*onl 14 java swing jscrollpane jlist autoscroll

我有下一个代码:

    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());  
        }
    }); 
Run Code Online (Sandbox Code Playgroud)

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

tra*_*god 10

当添加新的消息时,调用scrollRectToVisible()所述上JList使用Rectangle具有相同尺寸作为邮件窗格的最佳尺寸.给定垂直取向,它可方便地使的优选尺寸JScrollPaneJViewport邮件面板的高度的整数倍.另请参阅:如何使用滚动窗格.

附录:对文本区域滚动的这一引人注目的讨论也可能有所帮助.