我是JavaFX和ControlsFX的新手。ControlsFX SpreadsheetView rowspan IndexOutOfBoundsException
我正在嘗試使用ControlsFX庫創建一個非常基本的SpreadsheetView。以下是該函數來填充和創建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不會自動處理這個問題?
如果我取消那行,我得到下面的輸出:
編輯1:
而且,我發現了另一個問題,當合並單元格/行跨度佔據整個列/行,然後當您按下箭頭鍵導航到單元格時,會出現錯誤:
上述情況,當你按下右箭頭鍵(雖然他們是不是在右側的單元格)