"ensureIndexIsVisible"을 사용하여 스윙 스크롤을 만드는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/85548

  •  01-07-2019
  •  | 
  •  

문제

이 코드를 실행하면 선택한 항목이 표시되지 않습니다.나는 이미 운없이 별도의 스레드에서 실행하려고 시도했습니다.

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();
    }
}
도움이 되었습니까?

해결책

나는 그것을 알아!!

코드는 다음과 같습니다.

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() 메서드에 전달한 목록을 사용하는 대신 새 목록을 만듭니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top