在我的应用程序JavaFX中,我在ComboBox中显示几个用户,数据库中有两个表(姓名和姓氏(,我将用户存储在ObsersableCollection中。但是在我想拆分实际选择用户的姓名之后,以获取有关组合框中实际用户选择的其他信息。
我如何知道组合框中的值选择:
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
// Parti Locataire
SelectLocataire();
listLocataire.valueProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(@SuppressWarnings("rawtypes") ObservableValue ov, String t, String t1) {
LocataireInfo();
}
});
listLocataire.setItems(locataireList);
}
我的类 SelectLocataire;我在这里回收我在组合框中显示的所有名字和姓氏。
public void SelectLocataire() {
try {
Connection conn = DriverManager.getConnection(Cste.url, Cste.login, Cste.passwrd);
Statement stmt = conn.createStatement();
ResultSet rs;
rs = stmt.executeQuery("SELECT * FROM locataire");
while (rs.next()) {
nomUser = rs.getString("nom");
prenomUser = rs.getString("prenom");
locataireList.add(nomUser + " " + prenomUser);
}
conn.close();
} catch (Exception e) {
}
}
LocataireInfo(( 是我尝试使用组合框中选择的用户恢复数据库中其他信息的地方。
public void LocataireInfo() {
try {
Connection conn = DriverManager.getConnection(Cste.url, Cste.login, Cste.passwrd);
Statement stmt = conn.createStatement();
ResultSet rs;
rs = stmt.executeQuery("SELECT * FROM locataire WHERE nom = '"+nomUser+"'");
while (rs.next()) {
civiliteUser = rs.getString("Civilite");
adresseUser = rs.getString("Adresse");
codePostalUser = rs.getString("Codepostal");
villeUser = rs.getString("Ville");
telFUser = rs.getString("TelF");
telPUser = rs.getString("TelP");
faxUser = rs.getString("Fax");
emailUser = rs.getString("email");
}
conn.close();
// On gére les exceptions
} catch (Exception e) {}
// On rempli les champs avec ce qu'on a pris dans la BDD
nom.setText(nomUser);
prenom.setText(prenomUser);
adresse.setText(adresseUser);
codePostal.setText(codePostalUser);
ville.setText(villeUser);
telF.setText(telFUser);
telP.setText(telPUser);
fax.setText(faxUser);
email.setText(emailUser);
observations.setText(observationsUser);
civilite.setText(civiliteUser);
}
所以我无法通过变量恢复:nomUser,因为它是我的数据库中的最后一个用户 si 我需要执行:myList.valueProperty((;她返回:"姓氏",我想在恢复数据库中的其他信息后拆分。
谢谢的
要按原样解决问题,您可以:
// Handle error checking appropriately and probably need a better split based on your possible names
// for example "jon le snow" would not give you what you want.
listLocataire.valueProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(@SuppressWarnings("rawtypes") ObservableValue ov, String t, String t1) {
String[] nom = t.split(" "); // "given surname" -> ["given","surname"];
LocataireInfo(nom[1]);
}
});
但是,您最好实际利用用户或个人对象:
while (rs.next()) {
nomUser = rs.getString("nom");
prenomUser = rs.getString("prenom");
locataireList.add(new Person(nomUser, prenomUser));
}
使用的位置
ComboBox<Person> comboBox = new ComboBox<>();
comboBox.setStringConverter(new StringConverter<Person>() {
@Override public toString(Person person) { return person.nom + " " person.prenom;
@Override public fromString(String str) { ... }
});
和
listLocataire.valueProperty().addListener(new ChangeListener<Person>() {
@Override
public void changed(@SuppressWarnings("rawtypes") ObservableValue ov, Person t, Person t1) {
LocataireInfo(Person);
}
});