2014-11-01 150 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。

相关问题