2016-12-30 53 views
0

我是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不會自動處理這個問題?

如果我取消那行,我得到下面的輸出:

enter image description here

編輯1:

而且,我發現了另一個問題,當合並單元格/行跨度佔據整個列/行,然後當您按下箭頭鍵導航到單元格時,會出現錯誤:

enter image description here

上述情況,當你按下右箭頭鍵(雖然他們是不是在右側的單元格)

回答

1

讓我道歉,因爲它沒有很好的記載如何跨度必須在SpreadsheetView進行產生。我會更新文檔。

如果您想要跨度,則必須在跨度內的每個單元格中放置相同的單元格。因此,要麼你建立你自己的細胞,然後在每個地方。在你的情況下,你可以在第0行第1列和第1行第1列中添加相同的單元格。 或者你可以保留你的代碼,並簡單地在網格上調用方法​​。此方法會自動將您的單元格放置並相應地放置它。

關於第二個問題,請提交給我們的問題追蹤器,以便我們能夠解決這個問題:https://bitbucket.org/controlsfx/controlsfx/issues?status=new&status=open

如果您有任何關於SpreadsheetView其它問題,考慮在我們的谷歌組發佈,我們會得到通知:http://groups.controlsfx.org