gpt4 book ai didi

TableView 中的 JavaFX Spinner 编辑器

转载 作者:行者123 更新时间:2023-11-30 03:07:06 25 4
gpt4 key购买 nike

我正在尝试在 TableView 中实现旋转编辑器。我在 StackOverflow 上看到了有关此主题的各种内容,但似乎都没有解决该问题。

我创建了从 TableCell 扩展的类。微调器已创建,一切都已完成,我只是无法让微调器提交编辑。

private final class SpinnerCell extends TableCell<Car, Integer> {
private final ScrollSpinner<Integer> spinner;

private SpinnerCell(int min, int max, int initial, int step) {
spinner = new ScrollSpinner<>();
spinner.setValueFactory(new IntegerSpinnerValueFactory(min, max, initial, step));
setEditable(true);
}

@Override
public void startEdit() {
if (!isEmpty()) {
super.startEdit();
spinner.getValueFactory().setValue(getItem());

setOnKeyTyped(event -> { //I tried spinner.setOnKeyTyped, spinner.getEditor().setOnKeyTyped with no luck
if (event.getCode() == KeyCode.ENTER) {
Log.debug("commiting");
commitEdit(spinner.getValue()); //FIXME Never commited
}
});

setText(null);
setGraphic(spinner);
}
}

@Override
public void cancelEdit() {
super.cancelEdit();

setText(getItem().toString());
setGraphic(null);
}

@Override
public void updateItem(Integer item, boolean empty) {
super.updateItem(item, empty);

if (empty) {
setText(null);
setGraphic(null);
} else {
if (isEditing()) {
setText(null);
setGraphic(spinner);
} else {
setText(getItem().toString());
setGraphic(null);
}
}
}
}

}

最佳答案

您必须将onKeyTyped更改为onKeyPressed。您还必须将 commitEdit 调用包装在 Platform.runLater 中。

private final class SpinnerCell extends TableCell<Car, Integer> {
private final ScrollSpinner<Integer> spinner;

private SpinnerCell(int min, int max, int initial, int step) {
spinner = new ScrollSpinner<>();
spinner.setValueFactory(new IntegerSpinnerValueFactory(min, max, initial, step));
setEditable(true);
}

@Override
public void startEdit() {
if (!isEmpty()) {
super.startEdit();
spinner.getValueFactory().setValue(getItem());

setOnKeyPressed(event -> {
if (event.getCode() == KeyCode.ENTER) {
Platform.runLater(() -> {
commitEdit(spinner.getValue());
});
}
});

setText(null);
setGraphic(spinner);
}
}

@Override
public void cancelEdit() {
super.cancelEdit();

setText(getItem().toString());
setGraphic(null);
}

@Override
public void updateItem(Integer item, boolean empty) {
super.updateItem(item, empty);

if (empty) {
setText(null);
setGraphic(null);
} else {
if (isEditing()) {
setText(null);
setGraphic(spinner);
} else {
setText(getItem().toString());
setGraphic(null);
}
}
}
}

关于TableView 中的 JavaFX Spinner 编辑器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34501257/

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