2016-12-30 11 views
0

Я новичок в JavaFX и ControlsFX.ControlsFX SpreadsheetView rowspan IndexOutOfBoundsException

Я пытаюсь создать очень простой 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: Index: 2, Size: 2 at java.util.ArrayList.rangeCheck(ArrayList.java:653)

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

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

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

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

enter image description here

Edit 1:

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

enter image description here

Описанная ситуация возникает при нажатии правой клавиши со стрелкой (Даже если их не клетка справа)

ответ

1

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

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

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

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