gpt4 book ai didi

JavaFX TableView ComboBox 字符串转换器

转载 作者:行者123 更新时间:2023-12-02 10:53:05 24 4
gpt4 key购买 nike

我正在尝试将 ComboBox 添加到 TableView 中,但由于某种原因我无法进行转换。在幕后,如果值(value)是,我想进行对话0 那么它应该显示“free”,如果值为 1 那么它会在 ComboBox 中显示“taken”,一旦用户更改 ComboBox 中的值它将保存其整数值。

我不确定如何添加转换器,它在 event.getNewValue() 处给出以下错误:

cant convert int to string.

我做错的地方有什么帮助吗?

private final IntegerProperty mode;   
public int getMode() {
return mode.get();
}
public void setMode(int mode) {
this.mode.set(mode);
}
public IntegerProperty modeProperty() {
return mode;
}

Set<String> modeList = new HashSet<>();
modeList.add("Free");
modeList.add("Taken");

var converter=modeConverter();
TableColumn<Review, String> modeCombo = new TableColumn("Mode");
modeCombo.setCellValueFactory(new PropertyValueFactory("mode"));
modeCombo.setCellFactory(ComboBoxTableCell.forTableColumn(converter); //How to apply the converter.
modeCombo.setCellFactory(ComboBoxTableCell.forTableColumn(FXCollections.observableList(modeList))));

modeCombo.setOnEditCommit(event -> {
mode.setOperationMode(event.getNewValue()); //Method cannot be applied java.lang.String. But I already make the conversatin via modeConverter
});

...

private StringConverter modeConverter() {
return new StringConverter<Integer>() {
@Override
public String toString(Integer object) {
if (object == 0) {
return "FREE";
} else {
return "Taken";
}
}

@Override
public Integer fromString(String string) {
if (string.equalsIgnoreCase("free")) {
return 0;
} else {
return 1;
}
}
};
}

最佳答案

需要使用重载方法:

forTableColumn​(StringConverter converter, ObservableList items)

请注意,ComboBox 支持列表应包含 0、1,而不是 Free、Taken。转换器负责将 0 显示为 Free,将 1 显示为 Taken。

此外,TableColumn 的类型应为 <Review, Integer>而不是<Review, String> .

在您的代码中,您可以执行以下操作:

ObservableList<Integer> modeList = FXCollections.observableList(0, 1);
TableColumn<Review, Integer> modeCombo = new TableColumn("Mode");
modeCombo.setCellValueFactory(new PropertyValueFactory("mode"));
modeCombo.setCellFactory(ComboBoxTableCell.forTableColumn(converter, modeList)));

一旦确定了基本类型,以下操作就应该起作用:

modeCombo.setOnEditCommit(event -> {
mode.setOperationMode(event.getNewValue());
});

关于JavaFX TableView ComboBox 字符串转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52011698/

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