Диапазон строк ControlsFX SpreadsheetView IndexOutOfBoundsException

Я новичок в JavaFX и ControlsFX.

Я пытаюсь создать очень простой SpreadsheetView, используя библиотеку ControlsFX. Ниже приведена функция для заполнения и создания SpreadsheetView:

private fun spreadSheetFunc() : SpreadsheetView {

    val rowCount = 15
    val columnCount = 10
    val grid = GridBase(rowCount, columnCount)

    val rows = FXCollections.observableArrayList<ObservableList<SpreadsheetCell>>()
    var list = FXCollections.observableArrayList<SpreadsheetCell>()
    list.add(SpreadsheetCellType.STRING.createCell(0, 0, 1, 1, "row0-col0"))
    list.add(SpreadsheetCellType.STRING.createCell(0, 1, 2, 1, "row0-col1"))
    list.add(SpreadsheetCellType.STRING.createCell(0, 2, 1, 1, "row0-col2"))
    rows.add(list)
    list = FXCollections.observableArrayList()
    list.add(SpreadsheetCellType.STRING.createCell(1, 0, 1, 1, "row1-col0"))
    //commenting row1-col1 as row0-col1 has a rowspan of 2
    //list.add(SpreadsheetCellType.STRING.createCell(1, 1, 1, 1, "row1-col1"))
    list.add(SpreadsheetCellType.STRING.createCell(1, 2, 1, 1, "row1-col2"))
    rows.add(list)
    list = FXCollections.observableArrayList()
    list.add(SpreadsheetCellType.STRING.createCell(2, 0, 1, 1, "row2-col0"))
    list.add(SpreadsheetCellType.STRING.createCell(2, 1, 1, 1, "row2-col1"))
    list.add(SpreadsheetCellType.STRING.createCell(2, 2, 1, 1, "row2-col2"))
    rows.add(list)
    list = FXCollections.observableArrayList()
    list.add(SpreadsheetCellType.STRING.createCell(3, 0, 1, 1, "row3-col0"))
    list.add(SpreadsheetCellType.STRING.createCell(3, 1, 1, 1, "row3-col1"))
    list.add(SpreadsheetCellType.STRING.createCell(3, 2, 1, 1, "row3-col2"))

    rows.add(list)
    grid.setRows(rows)

    return SpreadsheetView(grid)
}

При запуске получаю следующую ошибку:

java.lang.IndexOutOfBoundsException: индекс: 2, размер: 2 в java.util.ArrayList.rangeCheck(ArrayList.java:653)

Я знаю, что это происходит, потому что я не добавляю никакого значения для rowIndex=1 colIndex=1 (см. закомментированную строку)... но это то, что я хочу.

row0-col1 has a rowspan of 2, что должно означать, что даже если мой row1-col1 отсутствует, проблем быть не должно.

Почему ControlsFX не позаботится об этом автоматически?

Если я раскомментирую эту строку, я получу следующий вывод:

введите здесь описание изображения

Редактировать 1:

Кроме того, я обнаружил еще одну проблему, когда colspan/rowspan занимает весь столбец/строку в SpreadsheetView, а затем, когда вы нажимаете клавишу со стрелкой для перехода к ячейкам, вы получаете сообщение об ошибке:

введите здесь описание изображения

Вышеупомянутая ситуация возникает, когда вы нажимаете клавишу со стрелкой вправо (даже если это не ячейка справа)


person niteesh    schedule 30.12.2016    source источник


Ответы (1)


Позвольте мне извиниться, потому что не очень хорошо документировано, как должен быть сделан диапазон в SpreadsheetView. Я обновлю документацию.

Если вы хотите протянуть, вы должны поместить одну и ту же ячейку в каждую ячейку внутри промежутка. Так что либо вы строите свою ячейку, и то в каждом месте. В вашем случае вы должны добавить одну и ту же ячейку в столбец 1 строки 0 и в столбец 1 строки 1. Или вы можете сохранить свой код и просто вызвать метод spanRow в сетке. Этот метод автоматически возьмет вашу ячейку и разместит ее соответствующим образом.

Что касается второй проблемы, отправьте ее в нашу систему отслеживания проблем, чтобы мы могли ее исправить: https://bitbucket.org/controlsfx/controlsfx/issues?status=new&status=open

Если у вас есть другая проблема, связанная с SpreadsheetView, рассмотрите возможность публикации в нашей группе Google, где мы будем получать уведомления: http://groups.controlsfx.org

person Maxoudela    schedule 17.01.2017