Я пытаюсь разместить JList
внутри JScrollPane
и сделать так, чтобы он перечислял в алфавитном порядке записи по вертикали. столбцы вроде этого:
A D G
B E H
C F
Однако, когда в JList
не хватает места для отображения дополнительных записей, я бы хотел, чтобы JScrollPane
прокручивал только по вертикали направление.
Это работает, когда я использую VERTICAL_WRAP
. Однако, похоже, что когда я использую вертикальное обтекание, я получаю горизонтальную полосу прокрутки, а когда я использую HORIZONTAL_WRAP
, я получаю желаемую полосу прокрутки, но элементы размещаются в порядке, который мне не нравится. Можно мне пирог и тоже его съесть? Вот простой пример того, что я пытаюсь сделать.
Это лучшее, что я мог найти, но я хотел бы иметь возможность прокручивать по вертикали, сохраняя вертикальный алфавитный порядок.
public class ScrollListExample {
static List<String> stringList = new ArrayList<String>();
static {
for (int i = 0; i < 500; i++) {
stringList.add("test" + i);
}
}
public static void main(final String[] args) {
final JFrame frame = new JFrame();
final Container contentPane = frame.getContentPane();
final JList list = new JList(stringList.toArray());
list.setLayoutOrientation(JList.VERTICAL_WRAP);
list.setVisibleRowCount(0);
final JScrollPane scrollPane = new JScrollPane(list);
contentPane.add(scrollPane);
frame.setPreferredSize(new Dimension(800, 400));
frame.pack();
frame.setVisible(true);
}
}
Я придумал одно решение: Если размер ячейки известен, я могу создать компонентный прослушиватель и прослушивать событие изменения размера. Когда это событие запускается, я могу вычислить желаемое количество строк, чтобы предотвратить горизонтальную прокрутку. Это просто похоже на взлом, и я не уверен, как это может работать с текстовыми компонентами переменного размера.