"ensureIndexIsVisible"을 사용하여 스윙 스크롤을 만드는 방법은 무엇입니까?
문제
이 코드를 실행하면 선택한 항목이 표시되지 않습니다.나는 이미 운없이 별도의 스레드에서 실행하려고 시도했습니다.
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() 메서드에 전달한 목록을 사용하는 대신 새 목록을 만듭니다.
제휴하지 않습니다 StackOverflow