如何拆分在 comboBox ObservableCollection 中获取的值



在我的应用程序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);
    }
});

最新更新