LTK*_*ort 6 java sql combobox javafx
我有一个机场数据库表,每个机场都有一个名称和一个ID.
在JavaFX中,我有一个表单,其中ComboBox,组合框需要显示所有机场名称,并且在提交表单时,需要将机场的ID插入数据库(而不是其名称).
但我真的不知道解决方案是什么.
我有一个
ObservableList vliegveldenList = FXCollections.observableArrayList();
ObservableList vliegveldenIDList = FXCollections.observableArrayList();
Run Code Online (Sandbox Code Playgroud)
填充数据库连接 ComboBox
ResultSet rs = Project_Fasten_Your_Seatbelt.conn.createStatement()
.executeQuery("SELECT vliegveldnaam, vliegveld_id FROM fys_project.vliegvelden;");
while (rs.next()) {
vliegveldenList.add(rs.getString(1));
vliegveldenIDList.add(rs.getString(2));
}
Run Code Online (Sandbox Code Playgroud)
填充组合框:
vliegveldHerkomst.setValue("Luchthaven ...");
vliegveldHerkomst.setItems(vliegveldenList);
Run Code Online (Sandbox Code Playgroud)
按下按钮时会将其添加到数据库中:
String registratieValue = registratieNmrTxt.getText();
String vluchtValue = vluchtNrmTxt.getText();
String vliegveldValue = (String) vliegveldHerkomst.getSelectionModel().getSelectedItem();
String bestemmingValue = (String) vliegveldBestemming.getSelectionModel().getSelectedItem();
String gevondenValue = (String) vliegveldGevonden.getSelectionModel().getSelectedItem();
LocalDate dGevondenValue = datumGevondenDate.getValue();
LocalDate dVluchtValue = datumVluchtDate.getValue();
String gewichtValue = gewichtBagageTxt.getText();
String kleurenValue = (String) kleuren.getSelectionModel().getSelectedItem();
String kofferValue = (String) kofferMerken.getSelectionModel().getSelectedItem();
String opmerkingValue = opmerkingArea.getText();
//Data gevonden bagage invoeren
Project_Fasten_Your_Seatbelt.conn.createStatement().executeUpdate(
"INSERT INTO gevondenbagage "
+ "(registratienummer, datumgevonden, datumaangemeld, vliegveldherkomst, "
+ "vliegveldbestemming, vliegveldgevonden, vluchtnummer, vluchtdatum, gewicht, "
+ "kleur, merk, `speciale opmerkingen`, userid)"
+ "VALUES ('" + registratieValue + "','" + dGevondenValue + "','" + today.format(localDate) + "','"
+ vliegveldValue + "','" + bestemmingValue + "','" + gevondenValue + "','"
+ vluchtValue + "','" + dVluchtValue + "','" + gewichtValue + "','"
+ kleurenValue + "','" + kofferValue + "','" + opmerkingValue + "','"
+ Project_Fasten_Your_Seatbelt.getUserId() + "')");
Run Code Online (Sandbox Code Playgroud)
这一切都运行正常,但我想为机场的名称设置机场的名称,而不是机场的名称vliegveldValue.
我该怎么做呢?
DVa*_*rga 19
您可以AirPort使用ID和name成员创建一个类,并ComboBox显示这些对象:ComboBox<AirPort>.
AirPort 类:
public class AirPort {
private int ID;
private String name;
public AirPort(int id, String name) {
this.ID = id;
this.name = name;
}
public int getID() { return ID; }
public String getName() { return name; }
}
Run Code Online (Sandbox Code Playgroud)
从数据库中获取项目并创建ComboBox:
// Fill the list from the DataBase
ObservableList<AirPort> airports = FXCollections.observableArrayList();
airports.addAll(new AirPort(0, "Heathrow"),
new AirPort(1, "Frankfurt"),
new AirPort(2, "NewYork"));
ComboBox<AirPort> combo = new ComboBox<>();
combo.setItems(airports);
Run Code Online (Sandbox Code Playgroud)
最后显示您可以使用的对象的名称,例如StringConverter:
combo.setConverter(new StringConverter<AirPort>() {
@Override
public String toString(AirPort object) {
return object.getName();
}
@Override
public AirPort fromString(String string) {
return combo.getItems().stream().filter(ap ->
ap.getName().equals(string)).findFirst().orElse(null);
}
});
Run Code Online (Sandbox Code Playgroud)
然后当值发生变化时,您将获得AirPort包含所需ID的对象:
combo.valueProperty().addListener((obs, oldval, newval) -> {
if(newval != null)
System.out.println("Selected airport: " + newval.getName()
+ ". ID: " + newval.getID());
});
Run Code Online (Sandbox Code Playgroud)
小智 6
您的机场班级...
public class Airport {
private int id;
private String name;
public Airport(int id, String name) {
super();
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
Run Code Online (Sandbox Code Playgroud)
}//类机场
创建机场的可观察列表
ObservableList<AirPort> airports = FXCollections.observableArrayList();
airports.add(new Airport(1, "Beijing Capital International Airport"));
airports.add(new Airport(2, "Los Angeles International Airport"));
airports.add(new Airport(3, "London Heathrow Airport"));
Run Code Online (Sandbox Code Playgroud)
设置组合框的项目。.
combo.setItems(airports);
Run Code Online (Sandbox Code Playgroud)
要获取机场的名称,您必须在Airport类中覆盖 toString 方法。
@Override
public String toString() {
return this.getName();
}
Run Code Online (Sandbox Code Playgroud)
现在要获取所选机场的 id,您可以设置一个事件处理程序。.
private void setEventOnAirport() {
combo.setOnKeyReleased(event -> {
if (event.getCode().equals(KeyCode.ENTER)) {
Airport airport = combo.getSelectionModel().getSelectedItem();
System.out.println(airport.getId());
}
});
}
Run Code Online (Sandbox Code Playgroud)
通过此功能,您可以查看所选机场的ID。. .
| 归档时间: |
|
| 查看次数: |
9281 次 |
| 最近记录: |