简体   繁体   English

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

[英]How to make Swing scroll with “ensureIndexIsVisible”?

When I run this code the selected item is not visible. 当我运行此代码时,所选项目不可见。 I've already tried to run it in a separate thread with no luck. 我已经尝试在没有运气的情况下在单独的线程中运行它。

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();
    }
}

I figured it out!! 我想到了!!

This is the code: 这是代码:

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();
    }
}

Instead of using the list that you passed into the createScrollPane() method, you create a new one. 您无需创建传递给createScrollPane()方法的列表,而是创建一个新列表。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM