如何拆分comboBox ObservableCollection中的值

问题描述 投票:-1回答:1

在我的应用程序JavaFX中,我在一个ComboBox中显示几个用户在DB(姓名和姓氏)中有两个表,我将我的用户存储在ObsersableCollection中。但是我希望拆分实际选择用户的名称和姓氏,以获取有关ComboBox中实际用户选择的其他信息。

我怎么知道组合框中的值选择:

    @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来恢复,因为它是我需要执行的数据库中的最后一个用户:myList.valueProperty();她回复:“名字姓氏”,我希望拆分后恢复我的数据库中的其他信息。

谢谢

java arrays list javafx observablecollection
1个回答
1
投票

要解决问题,您可以:

// 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]);
  }
});

但是你最好利用User或Person对象:

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);
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.