2014-02-25 40 views
1

我有一个TableView可编辑单元格。我使用推荐的JavaFx回调来实现可编辑的单元格。可编辑单元格上的JavaFX工具提示

myCol.setCellFactory(TextFieldTableCell.<Student>forTableColumn()); 

我想要一个工具提示添加到每个可编辑的细胞,所以我必须让我自己的回调。 是否可以扩展上述回调以添加添加工具提示的功能,还是必须从头开始编写我自己的工具提示?

回答

1

对此恐怕我不得不做出自己的TableCell,然后将它分配给您的TableColumn - myCol。

一个简单的例子,如图所示,you need to override all the functions of the TableCell as well :)

class EditingCell extends TableCell<Student, String> { 

    private TextField textField; 

    public EditingCell() { 
     setToolTip("YOUR MESSAGE"); 
    } 

    @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(); 
    } 
} 
} 

,然后添加到您的TableColumn

Callback<TableColumn, TableCell> cellFactory = 
     new Callback<TableColumn, TableCell>() { 
      public TableCell call(TableColumn p) { 
       return new EditingCell(); 
      } 
     }; 

firstNameCol.setCellFactory(cellFactory); 

不要忘记让你的表作为可编辑的!

table.setEditable(true); 
+0

这样做是否允许编辑功能(单击时单元变成EditText)?看起来这只是将工具提示功能添加到普通表格单元格。 –

+0

请仔细阅读完整的示例,您需要覆盖TableCell类的功能:) – ItachiUchiha

+0

@IchichiUchiha,您可以添加您发布的代码的引用链接。同样为了完成答案,您可以将OPT需要的工具提示附加到文本字段。 –

相关问题