[英]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.