编辑TableCell时,在promt文本中显示不同于它的值';它实际上显示在视图中-Javafx
在编辑模式下,TableCell在promt文本中显示的值是否可能与TableCell视图中显示的实际值不同编辑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
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以滚动您自己的单元格)是一个不错的选择