Отображение большого количества данных с JList? - PullRequest
1 голос
/ 18 ноября 2011

У меня есть JList, который должен отображать более 3000 элементов.Я хочу, чтобы «видимые» около 100 элементов в списке, и когда вы прокручиваете и приближаетесь к концу (или начинаете) «видимых» элементов, следующая часть (около 50) должна быть загружена в список.Есть ли простой способ сделать это?

Ответы [ 3 ]

3 голосов
/ 18 ноября 2011

В списке отображается только видимая часть.Таким образом, нет никаких накладных расходов с этой точки зрения.Если вы хотите ленивую загрузку - используйте пользовательские модели.

С этой страницы :
Вы можете написать свой собственный класс, который расширяет AbstractListModel или AbstractTableModel, чтобы при необходимости можно было предоставить необходимые данные.,В следующем примере показано использование AbstractTableModel.

2 голосов
/ 18 ноября 2011

нет, для этого нет простого способа, вам нужно реализовать разбиение на страницы

  • простейшее задание, когда оно управляется ядром баз данных, большинство из которых поддерживают пагинацию напрямую

  • в модели, но я никогда не видел обходного пути для XxxListModel, вместо этого используйте JTable с одним Colum, есть хороший обходной путь для разбиения на страницы для JTable

1 голос
/ 18 ноября 2011

У меня есть JList, который должен отображать более 3000 элементов.

Ха. Вы делаете это звучит как большое число. Вот список, содержащий (и отображающий просто отлично) более 30 тысяч предметов.

Big List

import javax.swing.*;

class BigList {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                int bigNumber = 30001;
                String[] bigData = new String[bigNumber];
                for (int ii=0; ii<bigNumber; ii++) {
                    bigData[ii] = "String " + (ii+1);
                }
                JList list = new JList(bigData);
                list.setVisibleRowCount(5);

                JOptionPane.showMessageDialog(null, new JScrollPane(list));
            }
        });
    }
}
...