Динамическое количество видимых строк в JList

У меня есть JList, который увеличивается в размерах вместе с JFrame. У меня есть следующий код:

defaultListModel = new DefaultListModel<SData>();
for (String string: listOfStrings) {
    defaultListModel.addElement(string);
}
jList = new JList<String>(defaultListModel);
jList.setCellRenderer(jListCellRenderer);
jList.addListSelectionListener(new ListSelectionListener() {
    public void valueChanged(ListSelectionEvent arg0) {
        //codes to go
    }
});
jList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
jList.setLayoutOrientation(JList.VERTICAL_WRAP);
scrollPane = new JScrollPane(jList);

Если я устанавливаю какое-то значение для метода setVisibleRowCount, номер строки становится фиксированным, и если я не устанавливаю значение, в игру вступает значение по умолчанию 8. Я хочу, чтобы это значение динамически менялось.


person Ahamed    schedule 27.02.2012    source источник
comment
что должно контролировать visibleRowCount? Что бы это ни было, прислушайтесь к этому свойству и соответствующим образом обновите visibleRowCount.   -  person kleopatra    schedule 27.02.2012
comment
Чтобы быстрее получить помощь, опубликуйте SSCCE.   -  person Andrew Thompson    schedule 27.02.2012
comment
Size из JList будет контролировать setVisibleRowCount()   -  person Ahamed    schedule 28.02.2012


Ответы (2)


Я только что обнаружил, что jList.setVisibleRowCount(0) делает его саморегулируемым при изменении размера JList.

person Ahamed    schedule 01.03.2012
comment
+1 Отрицательное значение тоже работает. См. также getPreferredScrollableViewportSize(). - person trashgod; 02.03.2012
comment
@trashgod, внутри метода setVisibleRowCount они проверяли max(0,paramRowCount), поэтому отправка отрицательного значения или нуля не имеет значения. Это займет только ноль. :) - person Ahamed; 02.03.2012

Вторя комментарию @kleopatras, неясно, что контролирует setVisibleRowCount(). Этот пример увеличивает окружающий Window по мере добавления строк до заранее определенного предела, затем полоса прокрутки вступает во владение. Это может дать вам некоторые идеи, или вы можете использовать его в качестве основы для своего sscce, как предлагает @Andrew.

Приложение: Если размер JList будет контролировать количество, я бы начал с половины size() модели. Затем добавьте одну видимую строку для каждого n, добавленного в модель, с фиксированным соотношением, которое закреплено до предварительно определенного предела. Чтобы обеспечить надежный подсчет, вам придется реализовать свои собственные ListModel или переопределить мутаторы в DefaultListModel.

person trashgod    schedule 28.02.2012
comment
Size из JList будет контролировать setVisibleRowCount() - person Ahamed; 28.02.2012