2014-10-11 17 views
0

我有一個TableView與2列(TableColumn)。Javafx - 如何更改upTableColumn的行爲

我將其中一列(TableColumn)委託給「on edit commit」(通過場景構建器)。

當我向其中一個單元格列寫入新值並按下ENTER時,我正在進入委託函數。但是,如果我正在寫一個值並在其他單元格上單擊鼠標,該值不會被保存(並且委派的函數未被調用)(因爲我沒有按ENTER)。

有沒有辦法改變這種行爲? 有沒有辦法通過場景構建器或代碼來做到這一點?

謝謝

回答

0

默認的TextField行爲要求用戶按下Enter鍵來提交編輯。這可以通過擴展TableCell類來更改焦點更改來提交編輯,如this TableView教程中的更改。準確地說,在這個例子中看看EditingCell類的實現及其用法。

基本上,所有需要的是表單元格設置焦點變化監聽器將在下面的例子中調用commitEdit的(),這樣的文本字段:

textField.focusedProperty().addListener(new ChangeListener<Boolean>(){ 
    @Override 
    public void changed(ObservableValue<? extends Boolean> arg0, 
         Boolean arg1, Boolean arg2) { 
    if (!arg2) { 
     commitEdit(value); 
    } 
    } 
}); 

上面提到的例子說明了如何設置新Java代碼中表格列的表格單元格類型,但它也可以在FXML中設置。

+0

謝謝,但在你的例子中,你添加列表到textField。我的TableView(或TableColumn)不包含任何textField ... 所以我在這裏想念什麼? – user3668129 2014-10-11 19:23:34

+0

textField是新實現的表格單元類的成員。當單元格進入編輯狀態時,它顯示該文本字段以啓用數據輸入。我的例子只是引用的詳細例子的簡短摘錄。這個例子缺少一些小的東西,比如在顯示文本字段時調用requestFocus(),但是理解如何實現可編輯表格單元格是一個很好的起點。請查看鏈接指向的示例以瞭解詳細信息。這對你有幫助嗎? – user645859 2014-10-11 20:15:13

+0

soory,它沒有幫助。我沒有使用textBox爲了將輸入插入到表中。用戶直接將輸入插入到表格中。我讀了你給我的鏈接,他們使用文本框來插入輸入,並且該表用於輸出。 – user3668129 2014-10-12 07:41:39