Я пытаюсь поместить 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);
}
}
Одно из возможных решений: если известен размер ячейки, я могу создать компонентный прослушиватель и прослушивать событие изменения размера.Когда это событие вызвано, я могу вычислить желаемое количество строк, чтобы предотвратить горизонтальную прокрутку.Это просто похоже на хак, и я не уверен, как это может работать с текстовыми компонентами переменного размера.