2014-11-01 147 views
0

我從Oracle教程中獲得了這門課程,但在我的應用程序中,我不想讓單元格編輯功能在用戶通過單擊鼠標按鈕對桌子單元格進行拼貼時觸發,而是通過其他獨立控件調用它。如果只有類包含一些事件處理程序,但它不會,我很困難。JavaFX - 如何防止鼠標點擊TableCell觸發其startEdit方法?

class EditingCell extends TableCell<Person, String> { 

    private TextField textField; 

    public EditingCell() { 
    } 

    @Override 
    public void startEdit() { 
     if (!isEmpty()) { 
      super.startEdit(); 
      createTextField(); 
      setText(null); 
      setGraphic(textField); 
      textField.selectAll(); 
     } 
    } 

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

     setText((String) getItem()); 
     setGraphic(null); 
    } 

    @Override 
    public void updateItem(String item, boolean empty) { 
     super.updateItem(item, empty); 

     if (empty) { 
      setText(null); 
      setGraphic(null); 
     } else { 
      if (isEditing()) { 
       if (textField != null) { 
        textField.setText(getString()); 
       } 
       setText(null); 
       setGraphic(textField); 
      } else { 
       setText(getString()); 
       setGraphic(null); 
      } 
     } 
    } 

    private void createTextField() { 
     textField = new TextField(getString()); 
     textField.setMinWidth(this.getWidth() - this.getGraphicTextGap()* 2); 
     textField.focusedProperty().addListener(new ChangeListener<Boolean>(){ 
      @Override 
      public void changed(ObservableValue<? extends Boolean> arg0, 
       Boolean arg1, Boolean arg2) { 
        if (!arg2) { 
         commitEdit(textField.getText()); 
        } 
      } 
     }); 
    } 

    private String getString() { 
     return getItem() == null ? "" : getItem().toString(); 
    } 
} 
} 

回答

0

好了,所以有一個名爲setEditable(布爾)一TabelCell命令,我認爲你應該只設置爲false(假設我明白你想要在這裏的),然後將其設置爲true,並給它當重點您的獨立控件被調用。我並沒有真正搞糟TableCell。

相關問題