Как разместить ArrayList в AbstractTableModel? - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть ArrayList<String[]> data, в который я помещаю значения в другую точку программы, я сделал ее переменной MyTable, которая расширяет AbstractTableModel. Но я не знаю, как поместить это в стол.

Ранее я поместил String[][] в таблицу, но я не уверен, как это будет работать с классом ArrayList.

Для getRowCount() я могу сделать newStringArr.length и для getColumnCount Я могу сделать newStringArr[0].length, а для getValueAt(int row, int column) я могу вернуть newStringArr[row][column] для типа String[][]. Что будет равно этим функциям для ArrayList?

1 Ответ

1 голос
/ 26 февраля 2020

Здесь - хороший пример использования AbstractTableModel. В вашем случае MyTable можно определить как:

class MyTable extends AbstractTableModel {
    private final int numRows;
    private final int numColumns;

    private List<String[]> data = new ArrayList<String[]>();

    public MyTable(int numColumns, int numRows) {
        this.numColumns = numColumns;
        this.numRows = numRows;

        init();
    }

    public int getColumnCount() {
        return data.get(0).length;
    }

    public int getRowCount() {
        return data.size();
    }

    public Optional<String> getValueAt(int row, int col) {
        if(isNotValidEntry(row, col)) {
            throw new RuntimeException("Out of bound row or col");
        }

        return Optional.ofNullable(data.get(row - 1)[col -1]);
    }

    public void setValueAt(String value, int row, int col) {
        if(isNotValidEntry(row, col)) {
            throw new RuntimeException("Out of bound row or col");
        }

        data.get(row - 1)[col - 1] = value;
        fireTableCellUpdated(row, col);
    }

    private void init() {
        IntStream.range(0, numRows)
                .forEach(r -> data.add(new String[numColumns]));
    }

    private boolean isNotValidEntry(int row, int col) {
        return numRows <= row - 1 || numColumns <= col - 1;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...