JavaFX组合框没有';无法显示来自对象的正确值
我在项目中使用JavaFX、Hibernate和Spring 我需要用我的对象值填充组合框。 在我的组合框中,我只需要显示模型中的标题值 我的模型课:JavaFX组合框没有';无法显示来自对象的正确值,java,javafx,combobox,Java,Javafx,Combobox,我在项目中使用JavaFX、Hibernate和Spring 我需要用我的对象值填充组合框。 在我的组合框中,我只需要显示模型中的标题值 我的模型课: public class Sector extends Identifier { private String title; private List<Stage> stageList; public List<Stage> getStageList() { return sta
public class Sector extends Identifier {
private String title;
private List<Stage> stageList;
public List<Stage> getStageList() {
return stageList;
}
public void setStageList(List<Stage> stageList) {
this.stageList = stageList;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Override
public String toString() {
return "Sector{" +
"id='" + getId() + '\'' +
"title='" + title + '\'' +
", stageList=" + stageList +
'}';
}
}
您应该使用
StringConverter
,而不是重写ListCell。这是实现相同结果的更优雅的方式
StringConverter<Sector> converter = new StringConverter<Sector>() {
@Override
public String toString(Sector object) {
return object.getTitle();
}
@Override
public Sector fromString(String string) {
return null;
}
};
你调试过了吗?setText(item.getName());这里返回一个字符串,组合框仅显示该字符串,这意味着问题不在组合框中,但“getName()”返回的值错误->模型可能未正确设置。您好,DVarga。请看我的新编辑,你是对的。保存的数据中有问题,而不是组合框中有问题。有了ItachiUchiha变体和您的建议,我已经解决了这个问题。谢谢你!
@FXML
public void currentSectorSelected(ActionEvent actionEvent) {
ObservableList<Stage> observableList = FXCollections.observableArrayList(((Sector) sector.getSelectionModel().getSelectedItem()).getStageList());
stage.setItems(observableList);
stage.getSelectionModel().selectFirst();
stage.setCellFactory(new Callback<ListView<Stage>, ListCell<Stage>>() {
@Override
public ListCell<Stage> call(ListView<Stage> param) {
return new ListCell<Stage>(){
@Override
public void updateItem(Stage item, boolean empty){
super.updateItem(item, empty);
if(!empty) {
setText(item.getName());
setGraphic(null);
} else {
setText(null);
}
}
};
}
});
}
@FXML
public ComboBox sectorComboBox;
@Override
public void initialize(URL location, ResourceBundle resources) {
sectorComboBox.setItems(FXCollections.observableArrayList(sectorService.listAll()));
}
StringConverter<Sector> converter = new StringConverter<Sector>() {
@Override
public String toString(Sector object) {
return object.getTitle();
}
@Override
public Sector fromString(String string) {
return null;
}
};
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.StringConverter;
public class ComboBoxConverter extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
ComboBox<Sector> comboBox = new ComboBox<>();
StringConverter<Sector> converter = new StringConverter<Sector>() {
@Override
public String toString(Sector object) {
return object.getTitle();
}
@Override
public Sector fromString(String string) {
return null;
}
};
comboBox.setConverter(converter);
comboBox.setItems(FXCollections.observableArrayList(new Sector("Title1", 24), new Sector("Title2", 50)));
comboBox.getSelectionModel().selectFirst();
VBox box = new VBox(comboBox);
box.setAlignment(Pos.CENTER);
Scene scene = new Scene(box, 200, 200);
primaryStage.setScene(scene);
primaryStage.show();
}
}
public class Sector {
private String title;
private double area;
public Sector(String title, double area) {
this.title = title;
this.area = area;
}
public double getArea() {
return area;
}
public void setArea(double area) {
this.area = area;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}