2012-04-26 61 views
6

我一直在學習JavaFX 2的一些內容,但是我遇到了可編輯表格單元的問題,我找不到解決方案。爲了節省粘貼了大量的代碼,我已經創建了一個包含JavaFX的文檔只有TableView中示例項目:http://docs.oracle.com/javafx/2/ui_controls/table-view.htmJava FX 2表格單元格編輯和聚焦

如果你運行了這個代碼,您看到此行爲:

  1. 點擊一行選擇該行。
  2. 單擊所選行中的單元格將單元格轉換爲文本字段,以便可以編輯該單元格。
  3. 單擊文本字段可以對內容進行編輯。

問題是,這是三次點擊,以達到單元格可以編輯的點。我想實現的是當創建(例如第2步)焦點中的文本字段直接切換到文本字段。

我最好的猜測就如何實現這一目標是增加textField.requestFocus()到的startEditing()方法的末尾:

@Override 
public void startEdit() { 
    super.startEdit(); 

    if (textField == null) { 
     createTextField(); 
    } 
    setGraphic(textField); 
    setContentDisplay(ContentDisplay.GRAPHIC_ONLY); 
    textField.selectAll(); 
    textField.requestFocus(); 
} 

但這不起作用。如果我將焦點偵聽器添加到文本字段中,我發現它會獲得焦點,但會再次失去焦點。在偵聽器中插入一箇中斷點似乎表明TableView在顯示文本字段之前重新獲得焦點。

因此,問題是如何在編輯開始時將注意力集中到文本字段?

回答

8

能否請您與更換線textField.requestFocus();

 Platform.runLater(new Runnable() { 
      @Override 
      public void run() { 
       textField.requestFocus(); 
      } 
     }); 

,然後再試一次。

+1

謝謝烏魯克,這是固定的。看看runLater的文檔,雖然我猜測這可能會失敗,因爲它不能保證它的運行時間 - 大概它可以在表格抓取之前運行。 – wobblycogs 2012-04-26 11:02:15

+0

我同意wobblycogs,我已經使用runlater技巧在過去幾次要求重點,它一直爲我工作,但缺乏確定性,它會繼續工作並不會給我一個溫暖,模糊感覺它。 (另一種方法是使用時間軸將焦點請求推回到後面 - 但這種方法有它自己的問題)。 – jewelsea 2012-04-26 18:10:21