0
我有一個ScrollPane的JList。當我按下一個按鈕時,新的一行被添加到JList.But問題是它不會滾動到最後一個元素,而是倒數第二個元素。這是一部分使用的代碼:沒有錯誤。除此之外,一切都很好。JList與ScrollPane自動滾動錯誤
DefaultListModel<String> model = new DefaultListModel<String>();
JList<String> list = new JList<String>(model);
JPanel panel = new JPanel(new GridLayout(0,1));
panel.add(list);
scroll = new JScrollPane(panel);
JPanel p = new JPanel(new BorderLayout());
p.add(scroll, BorderLayout.CENTER);
p.add(buttonPanel, BorderLayout.SOUTH); // here are more button's including the one with the action described below
public void actionPerformed(ActionEvent e) {
list.setFont(new Font("Times new Roman", Font.PLAIN, 30));
model.add(list.getModel().getSize(), "Some text randomly"+ i++);
panel.repaint();panel.revalidate();
scroll.getVerticalScrollBar().setValue(scroll.getVerticalScrollBar().getMaximum());
}
我覺得這個方法結束後的實際重繪發生。嘗試使用'SwingUtilities.invokeLater()'像這樣調用最後一行:'SwingUtilities.invokeLater(new Runnable(){public void run(){scroll.getVerticalScrollBar()。setValue(scroll.getVerticalScrollBar()。getMaximum()) ;}});'(在Java 8中,您可以使用Lambda表達式使此語句更小且更易讀) – gogognome
它給出了此行上的標記語法錯誤:scroll.getVerticalScrollBar()。setValue(scroll.getVerticalScrollBar() .getMaximum()); – Axl
您是否複製並粘貼了代碼?我確實在代碼中某處出現了無效的字符,只需手動輸入代碼,是的,括號內有一些無效的不可見字符'getMaximum'之後,如果你直接複製並粘貼代碼,不知道這些代碼是從哪裏來的,我只是複製並粘貼了代碼示例中的代碼。 – gogognome