有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何分割组合框ObservableCollection中的值

在我的应用程序JavaFX中,我在一个组合框中显示几个用户,数据库中有两个表(名称和姓氏),我将用户存储在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);
}

我的班级选择Locataire;在这里,我重复显示组合框中显示的所有姓名

    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(); 她返回:“name姓氏”,我希望在恢复数据库中的其他信息后进行拆分

谢谢


共 (1) 个答案

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

    但你最好利用用户或个人对象:

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