我是javafx的新手我无法找到解决方案。
我有mysql表people
。
------------------
id | name
------------------
int,ai,pk | string
------------------
我想将数据仅填充到name
列表的组合框中,然后每次单击组合框时,该值应为id
。请帮帮我。
答案 0 :(得分:1)
如果您使用JPA来管理关系数据,那么此代码应该完成这项工作,否则您必须先将表行映射到对象。 祝你好运!
List<People> PeopleList = em.createQuery("SELECT p FROM People p").getResultList();
ObservableList<People> peopleData = FXCollections.observableList(PeopleList);
PeopleList.add(null);
yourCombo.setCellFactory((comboBox) -> {
return new ListCell<People>() {
@Override
protected void updateItem(People item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setText("Select");
yourCombo.getSelectionModel().clearSelection();
} else {
setText(item.getName();
}
}
};
});
yourCombo.setConverter(new StringConverter<People>() {
@Override
public String toString(People people) {
if (people == null) {
return "Select";
} else {
return people.getName();
}
}
@Override
public People fromString(String nameString) {
return null; // No conversion fromString needed.
}
});
yourCombo.setItems(peopleData);
答案 1 :(得分:0)
试试这个演示!其中,id_value
是id
的相关name
。
public class PopulateComboBoxDemo extends Application {
private ComboBox<String> people = new ComboBox<>();
private List<String> ids = new ArrayList<>();
@Override
public void start(Stage primaryStage) {
this.populateData();
BorderPane root = new BorderPane();
root.setCenter(people);
Scene scene = new Scene(root, 300, 250);
people.setOnAction(e -> {
int index = people.getSelectionModel().getSelectedIndex();
//here is the id_value
String id_value = ids.get(index);
System.out.println("The id of " + people.getItems().get(index) + " is : " + id_value);
//
//.........
//
});
primaryStage.setScene(scene);
primaryStage.show();
}
private void populateData() {
this.people.getItems().clear();
this.ids.clear();
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/database","user","password");
String sql = "select name, id from person";
PreparedStatement st = con.prepareStatement(sql);
ResultSet rs = st.executeQuery();
int index = 0;
while(rs.next()) {
this.people.getItems().add(index, rs.getString("name"));
this.ids.add(index, String.valueOf(rs.getInt("id")));
index++;
}
con.close();
} catch (ClassNotFoundException | SQLException ex) {
Logger.getLogger(PopulateComboBoxDemo.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static void main(String[] args) {
launch(args);
}
}