Многостраничный JTable: невозможно отобразить меньше элементов, чем строк - PullRequest
0 голосов
/ 05 декабря 2011

Я реализовал JTable с пользовательским AbstractTableModel для реализации подкачки. Я хочу показать 5 элементов на странице, но у меня проблема: если у меня есть N элементов для отображения (с N, кратным 5), все в порядке, но если у меня, например, 14 элементов для отображения, я получить исключение. Проблема в том, что метод получения значения каждой ячейки выходит за пределы. В частности проблема в методе

public Object getValueAt(int row, int col) {
    int realRow = row + (pageOffset * pageSize);
    return data[realRow].getValueAt(col);
}

на самом деле у нас есть 5 строк (от 0 до 4) и 14 элементов, но, очевидно, когда мы пытаемся получить последний элемент, мы делаем: realRow = 4 + (2*5) и, очевидно, у меня нет элемента в строке 14. Как я могу решить эту проблему? Как я могу сказать своей программе прекратить получать значение, как только достиг 14-го файла? Возможно ли это?

Ответы [ 3 ]

1 голос
/ 05 декабря 2011

Убедитесь, что метод getRowCount вашей модели соответствует тому, что вы хотите, чтобы он делал. Метод getRowCount должен возвращать приемлемый номер для вашей таблицы, чтобы он не вызывал getValueAt для каких-либо несуществующих строк. Так что, если у вас нет строки 14, количество строк не должно быть таким высоким.

1 голос
/ 05 декабря 2011

Я думаю, что не легкая работа , я предлагаю взглянуть на код Aephyr , возможно, более простой способ - реализовать этот код , но для реального эффекта вы должен заблокировать JScrollBars, swith на НИКОГДА

1 голос
/ 05 декабря 2011

Просто закрепите значение до приемлемого максимума:

realRow = Math.min(realRow, getRowCount());

Приложение: В приведенном примере выполните getValueAt() следующим образом:

// Work only on the visible part of the table.
public Object getValueAt(int row, int col) {
    int realRow = row + (pageOffset * pageSize);
    if (realRow < data.length) {
        return data[realRow].getValueAt(col);
    } else {
        return null;
    }
}

Также рассмотрим BasicArrowButton.

...