Как разделить значение, взятое в comboBox ObservableCollection - PullRequest
0 голосов
/ 30 апреля 2019

В моем приложении JavaFX я отображаю в ComboBox несколько пользователей с двумя таблицами в БД (имя и фамилия), я храню своих пользователей в 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 ();она возвращает: «имя, фамилия», и я хочу разделить после восстановления другую информацию в моей базе данных.

Спасибо

1 Ответ

1 голос
/ 30 апреля 2019

Чтобы решить проблему в ее нынешнем виде, вы можете:

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