JList - использовать вертикальную полосу прокрутки вместо горизонтальной с вертикальной ориентацией обтекания?

Я пытаюсь разместить JList внутри JScrollPane и сделать так, чтобы он перечислял в алфавитном порядке записи по вертикали. столбцы вроде этого:

A D G
B E H
C F 

Однако, когда в JList не хватает места для отображения дополнительных записей, я бы хотел, чтобы JScrollPane прокручивал только по вертикали направление.

Это работает, когда я использую VERTICAL_WRAP . Однако, похоже, что когда я использую вертикальное обтекание, я получаю горизонтальную полосу прокрутки, а когда я использую HORIZONTAL_WRAP , я получаю желаемую полосу прокрутки, но элементы размещаются в порядке, который мне не нравится. Можно мне пирог и тоже его съесть? Вот простой пример того, что я пытаюсь сделать.

enter image description here

Это лучшее, что я мог найти, но я хотел бы иметь возможность прокручивать по вертикали, сохраняя вертикальный алфавитный порядок.

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);
    }
}

Я придумал одно решение: Если размер ячейки известен, я могу создать компонентный прослушиватель и прослушивать событие изменения размера. Когда это событие запускается, я могу вычислить желаемое количество строк, чтобы предотвратить горизонтальную прокрутку. Это просто похоже на взлом, и я не уверен, как это может работать с текстовыми компонентами переменного размера.

8
задан Kevin K 3 February 2012 в 19:53
поделиться