编辑TableCell时,在promt文本中显示不同于它的值';它实际上显示在视图中-Javafx

编辑TableCell时,在promt文本中显示不同于它的值';它实际上显示在视图中-Javafx,javafx,Javafx,在编辑模式下,TableCell在promt文本中显示的值是否可能与TableCell视图中显示的实际值不同 public class JavaFXApplication8 extends Application { @Override public void start(Stage primaryStage) { TableView<Person> tableView = getTableView(); populate(tableView); Stac

在编辑模式下,TableCell在promt文本中显示的值是否可能与TableCell视图中显示的实际值不同

public class JavaFXApplication8 extends Application {

@Override
public void start(Stage primaryStage) {

    TableView<Person> tableView = getTableView();
    populate(tableView);
    StackPane root = new StackPane();
    root.getChildren().add(tableView);

    Scene scene = new Scene(root, 300, 250);

    primaryStage.setScene(scene);
    primaryStage.show();
}

private TableView getTableView() {
    TableView<Person> toReturn = new TableView<>();
    toReturn.setEditable(true);
    TableColumn columnName = new TableColumn("Name");
    columnName.setCellValueFactory(new PropertyValueFactory<>("name"));
    TableColumn<Person, String> columnTime = new TableColumn<>("Time");
    columnTime.setEditable(true);
    columnTime.setCellFactory(TextFieldTableCell.forTableColumn());
    columnTime.setCellValueFactory((TableColumn.CellDataFeatures<Person, String> param) -> {
        StringProperty property = new SimpleStringProperty();
        property.setValue(param.getValue().getTime() + ":00");
        return property;
    });

    toReturn.getColumns().addAll(columnName, columnTime);
    return toReturn;
}

private void populate(TableView<Person> tableView) {
    List<Person> list = new ArrayList<>();
    list.add(new Person("Dan", 60));
    list.add(new Person("Harry", 120));
    list.add(new Person("Bill", 50));
    tableView.getItems().addAll(list);
}

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    launch(args);
}

public class Person {

    public Person(String name, int time) {
        this.name = name;
        this.time = time;
    }

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    private int time;

    public int getTime() {
        return time;
    }

    public void setTime(int time) {
        this.time = time;
    }

}
公共类JavaFXApplication8扩展应用程序{
@凌驾
公共无效开始(阶段primaryStage){
TableView TableView=getTableView();
填充(tableView);
StackPane root=新的StackPane();
root.getChildren().add(tableView);
场景=新场景(根,300,250);
初级阶段。场景(场景);
primaryStage.show();
}
私有TableView getTableView(){
TableView toReturn=新建TableView();
toReturn.setEditable(true);
TableColumn columnName=新的TableColumn(“名称”);
columnName.setCellValueFactory(新属性ValueFactory(“名称”);
TableColumn columnTime=新的TableColumn(“时间”);
columnTime.setEditable(true);
setCellFactory(TextFieldTableCell.forTableColumn());
columnTime.setCellValueFactory((TableColumn.CellDataFeatures参数)->{
StringProperty属性=新的SimpleStringProperty();
setValue(param.getValue().getTime()+“:00”);
归还财产;
});
toReturn.getColumns().addAll(columnName,columnTime);
回归回归;
}
专用void填充(TableView TableView){
列表=新的ArrayList();
增加(新的人(“Dan”,60));
添加(新人物(“Harry”,120));
增加(新的人员(“法案”,50));
tableView.getItems().addAll(列表);
}
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args){
发射(args);
}
公共阶层人士{
公众人物(字符串名称,整数时间){
this.name=名称;
这个时间=时间;
}
私有字符串名称;
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
私人整数时间;
公共int getTime(){
返回时间;
}
公共无效设置时间(整数时间){
这个时间=时间;
}
}
我想要实现的是以下两张图片:

[1] 编辑前:

[2] 编辑时:

问题是,当我双击进入编辑模式时,TableCell中的promt text in TextField显示的值与table列的CellValueFactory中的StringProperty中的值相同

也许CellFactory和CellValueFactory有可能实现这一点?

是的,定制单元格(扩展TextFieldTableCell或c&p以滚动您自己的单元格)是一个不错的选择