代码之家  ›  专栏  ›  技术社区  ›  Roman Glass

如何使用“ensureIndexIsVisible”使Swing滚动?

  •  1
  • Roman Glass  · 技术社区  · 17 年前

    import javax.swing.JFrame;
    import java.awt.Container;
    import javax.swing.JList;
    import javax.swing.ListSelectionModel;
    import javax.swing.JScrollPane;
    import java.awt.Dimension;
    
    public class ScrollList extends JFrame {
        int defaultValue;
    
        ScrollList() {
            Container cp = getContentPane();
            JList list = createList();
            defaultValue = 20;
    
            cp.add(createScrollPane(list));
            pack();
            setVisible(true);
            list.ensureIndexIsVisible(defaultValue);
        }
    
        JList createList() {
            Integer[] model = new Integer[73];
            JList list = new JList(model);
    
            for (int i = 1; i < model.length; i++)
                model[i] = i;
            list.setSelectedIndex(defaultValue);
    
            return list;
        }
    
        JScrollPane createScrollPane(JList list) {
            JScrollPane s = new JScrollPane(createList());
    
            s.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            s.setPreferredSize(new Dimension(100, 200));
    
            return s;
        }
    
        public static void main(String[] args) {
            new ScrollList();
        }
    }
    
    1 回复  |  直到 12 年前
        1
  •  1
  •   jjnguy Julien Chastang    17 年前

    我想出来了!!

    代码如下:

    import javax.swing.JFrame;
    import java.awt.Container;
    import javax.swing.JList;
    import javax.swing.ListSelectionModel;
    import javax.swing.JScrollPane;
    import java.awt.Dimension;
    
    public class ScrollList extends JFrame {
        final int defaultValue = 20;
    
        ScrollList() {
            setDefaultCloseOperation(DISPOSE_ON_CLOSE);
            Container cp = getContentPane();
            JList list = createList();
    
            cp.add(createScrollPane(list));
            pack();
            list.ensureIndexIsVisible(list.getSelectedIndex());
    
            setVisible(true);
        }
    
        JList createList() {
            Integer[] model = new Integer[73];
            JList list = new JList(model);
    
            for (int i = 1; i < model.length; i++)
                model[i] = i;
            list.setSelectedIndex(defaultValue);
            return list;
        }
    
        JScrollPane createScrollPane(JList list) {
            JScrollPane s = new JScrollPane(list); // MAJOR FIX HERE!
            s.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            s.setPreferredSize(new Dimension(100, 200));
            return s;
        }
    
        public static void main(String[] args) {
            new ScrollList();
        }
    }
    

    您创建了一个新的列表,而不是使用传递到createScrollPane()方法中的列表。