我有一個使用Groovy SwingBuilder的Jtable設置,我試圖在表中保留一個空行,以便用戶可以繼續添加新值。在填入空行(單列)之後,我立即添加一個新行,編輯新行的單元格,並請求表中的焦點。在第一次請求焦點調用期間,一切正常(假設我先單擊單元格)。點擊enter鍵以保存我的單元格內容後,我添加了另一個空行並且請求焦點失敗。任何人對可能發生的事情有任何建議?Jtable requestFocusInWindow第二次調用失敗
SwingBuilder swingBuilder = new SwingBuilder()
JTable myTable = swingBuilder.table(autoCreateRowSorter: true, focusable: true)
table.myTable = swingBuilder.tableModel(list: [[value: "test"]) {
swingBuilder.closureColumn(header: "Values",
read: { row -> return row[value] },
write: { row, newValue ->
row[value] = newValue
addNewRow(myTable)
})
}
void addNewRow(JTable myTable) {
List<Map<String, String>> myTableRows = myTable.model.getRows()
if(myTableRows.findAll{ it[value].trim().isEmpty() }.size() == 0) { // prevent more than one empty row
myTableRows.add([value: ""])
myTable.model.fireTableDataChanged()
// set focus on the newly created row
int indexOfNewRow = myTable.convertRowIndexToView(myTableRows.findIndexOf { it[value] == "" })
myTable.changeSelection(indexOfNewRow, 0, false, false)
myTable.editCellAt(indexOfNewRow, 0)
myTable.requestFocusInWindow() // succeeds on first call when I click this cell, fails on second when I hit enter after filling in a row
}
我檢查了可見,可顯示和可聚焦的值,並且在這種情況下都返回true兩次。我注意到的一件事是當我重寫表中輸入鍵的輸入/操作時。在我最初單擊並編輯後,輸入將保存行,創建一個新行,然後專注於新行。在我編輯這個新行並按回車後,沒有任何反應。以某種方式聚焦兩個不同的物體?
這應該是自動完成,另一個問題將移動與插入或selectAll – mKorbel 2014-09-13 19:38:18
我沒有檢查myTable.editCellAt(indexOfNewRow,0)的返回值,並且它在兩種情況下都返回true。一切似乎都成功了,直到最後的requestFocusInWindow調用。 – Skeeterdrums 2014-09-16 20:06:24
你試圖在editorComponent上調用它嗎? – 2014-09-16 22:53:03