gpt4 book ai didi

javafx tableview oneditcommit 不会被自定义 cellfactory 调用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:17:31 35 4
gpt4 key购买 nike

看看下面的工作代码:

    class MyType{
SimpleStringProperty myname;
SimpleObjectProperty<Color> mycolor;
}

TableColumn col;
arr = FXCollections.observableArrayList(new ArrayList<MyType>());
tblColName.setCellValueFactory(new PropertyValueFactory("myname"));
// Use the cell-factory provided by TextFieldTableCell.
tblColName.setCellFactory(TextFieldTableCell.forTableColumn());
tblColName.setOnEditCommit(new EventHandler<TableColumn.CellEditEvent>() {
@Override
public void handle(TableColumn.CellEditEvent cellEditEvent) {
((MyType) cellEditEvent.getRowValue()).myname.set((String) cellEditEvent.getNewValue());
}
});

但是,一旦我使用自定义 TableCell,就不再调用 setOnEditCommit 中的代码:

public class ColorPickerTableCell<S> extends TableCell<S, Color>{
private ColorPicker cp;

public ColorPickerTableCell(){
cp = new ColorPicker(Color.BLACK);
cp.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
commitEdit(cp.getValue());
updateItem(cp.getValue(), isEmpty());
}
});
setGraphic(cp);
setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
setEditable(true);
}
@Override
protected void updateItem(Color item, boolean empty) {
super.updateItem(item, empty);
cp.setVisible(!empty);
this.setItem(item);
}

public static <T> Callback<TableColumn<Color, T>, TableCell<Color, T>> forTableColumn(){
return new Callback<TableColumn<Color, T>, TableCell<Color, T>>() {
@Override
public TableCell<Color, T> call(TableColumn<Color, T> colorTTableColumn) {
return new ColorPickerTableCell();
}
};

}

对上面的代码稍作改动...

    TableColumn col;
arr = FXCollections.observableArrayList(new ArrayList<MyType>());
tblColName.setCellValueFactory(new PropertyValueFactory("myname"));
// Use the cell-factory provided by TextFieldTableCell.
tblColName.setCellFactory(ColorPickerTableCell.forTableColumn());
tblColName.setOnEditCommit(new EventHandler<TableColumn.CellEditEvent>() {
@Override
public void handle(TableColumn.CellEditEvent cellEditEvent) {
throw new NotImplementedException(); // is never thrown.
}
});

... 使代码不再有效。永远不会抛出异常。我认为我在 ColorPickerTableCell 的设计中做错了什么,但我无法想象是什么。如何让 JavaFX 调用我的 OnEditCommit

最佳答案

您需要先使用statEdit() 进入编辑状态; , 如果你现在提交一个事件将被触发

关于javafx tableview oneditcommit 不会被自定义 cellfactory 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17473249/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com