Comment faire défiler Swing avec «EnsureIndexVisible»?
Question
Lorsque je lance ce code, l'élément sélectionné n'est pas visible. J'ai déjà essayé de l'exécuter dans un fil séparé sans succès.
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();
}
}
La solution
Je l'ai compris !!
Ceci est le 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();
}
}
Au lieu d'utiliser la liste que vous avez transmise à la méthode createScrollPane (), vous en créez une nouvelle.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow