ControlsFX 电子表格视图 rowspan IndexOutOfBoundsException
ControlsFX SpreadsheetView rowspan IndexOutOfBoundsException
我是 JavaFX 的新手并且 ControlsFX。
我正在尝试使用 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:
此外,我发现了另一个问题,当 colspan/rowspan 占据了 SpreadsheetView 中的整个 column/row,然后当按下箭头键导航到单元格时,您会收到错误消息:
当你按下右箭头键时出现上述情况(即使他们不是右边的单元格)
让我道歉,因为没有很好地记录如何在 SpreadsheetView 中制作跨度。我会更新文档。
如果要跨度,则必须在跨度内的每个单元格中放置相同的单元格。
所以要么你建立自己的牢房,然后在每个地方。在您的情况下,您将在第 0 行第 1 列和第 1 行第 1 列中添加相同的单元格。
或者您可以保留您的代码,并简单地调用 Grid 上的方法 spanRow。此方法将自动获取您的单元格并相应地放置它。
关于第二个问题,请将其提交给我们的问题跟踪器,以便我们进行修复:https://bitbucket.org/controlsfx/controlsfx/issues?status=new&status=open
如果您有关于 SpreadsheetView 的其他问题,请考虑在我们的 Google 组中发帖,我们将在该组中收到通知:http://groups.controlsfx.org
我是 JavaFX 的新手并且 ControlsFX。
我正在尝试使用 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:
此外,我发现了另一个问题,当 colspan/rowspan 占据了 SpreadsheetView 中的整个 column/row,然后当按下箭头键导航到单元格时,您会收到错误消息:
当你按下右箭头键时出现上述情况(即使他们不是右边的单元格)
让我道歉,因为没有很好地记录如何在 SpreadsheetView 中制作跨度。我会更新文档。
如果要跨度,则必须在跨度内的每个单元格中放置相同的单元格。 所以要么你建立自己的牢房,然后在每个地方。在您的情况下,您将在第 0 行第 1 列和第 1 行第 1 列中添加相同的单元格。 或者您可以保留您的代码,并简单地调用 Grid 上的方法 spanRow。此方法将自动获取您的单元格并相应地放置它。
关于第二个问题,请将其提交给我们的问题跟踪器,以便我们进行修复:https://bitbucket.org/controlsfx/controlsfx/issues?status=new&status=open
如果您有关于 SpreadsheetView 的其他问题,请考虑在我们的 Google 组中发帖,我们将在该组中收到通知:http://groups.controlsfx.org