Binding entre une TableView et deux TextField (JavaFX 2.0)
Bonjour à vous
Depuis plusieurs jours, je cherche une solution pour faire la liaison entre ma TableView et mes TextField (qui servent à éditer ma TableView)
Le principe :
Les données (Personne) sont lues en JPA depuis une DB (PersonneDAO). Ce sont des simples POJO. Ces données sont affichées dans une TableView.
Je voudrais que lorsqu'on sélectionne une ligne dans la TableView, les TextField se remplissent avec les données de la TableView et lorsque l'on modifier le contenu des TextField, la ligne sélectionnée de la TableView soit modifiée directement.
J'ai chercher des exemples via google afin de mieux comprendre le mécanisme du binding mais rien ne m'a permis de trouver une solution. J'ai tenté de me baser sur le site http://ugate.wordpress.com/2012/07/3...ings-part-iii/ mais rien à faire.
Voici mes sources :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import jfxtras.labs.scene.control.BeanPathAdapter;
import java.util.ArrayList;
import java.util.List;
public class TestAppl extends Application {
private TableView<Personne> tv;
private TextField tfNom;
private TextField tfPrenom;
private ObservableList<Personne> personnes;
private Personne p = new Personne();
private BeanPathAdapter<Personne> personPA = new BeanPathAdapter<>(p);
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Test de TableView");
Scene scene = new Scene(new BorderPane(), 800, 500);
primaryStage.setScene(scene);
PersonneDAO personneDAO = new PersonneDAO();
HBox pan = new HBox();
pan.setPadding(new Insets(10, 10, 10, 10));
pan.setSpacing(5);
tfNom = new TextField();
tfPrenom = new TextField();
pan.getChildren().addAll(tfNom, tfPrenom);
((BorderPane) scene.getRoot()).setTop(pan);
tv = new TableView<>();
TableColumn<Personne, String> nomCol = new TableColumn("Nom");
nomCol.setCellValueFactory(new PropertyValueFactory("nom"));
TableColumn<Personne, String> prenomCol = new TableColumn("Prénom");
prenomCol.setCellValueFactory(new PropertyValueFactory("prenom"));
tv.getColumns().addAll(nomCol, prenomCol);
personnes = FXCollections.observableArrayList(personneDAO.getPersonnes());
tv.getItems().addAll(personnes);
tv.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
if (mouseEvent.getButton().equals(MouseButton.PRIMARY)) {
if (mouseEvent.getClickCount() == 1) {
personPA.setBean(tv.getSelectionModel().getSelectedItem());
personPA.bindBidirectional("nom", tfNom.textProperty());
personPA.bindBidirectional("prenom", tfPrenom.textProperty());
}
}
}
});
((BorderPane) scene.getRoot()).setCenter(tv);
primaryStage.show();
}
public static void main(String[] args) {
Application.launch(args);
} |
Le bean Personne :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| public class Personne {
private String nom;
private String prenom;
public Personne() {
}
public Personne(String nom, String prenom) {
this.nom = nom;
this.prenom = prenom;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getPrenom() {
return prenom;
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
} |
Et le futur DAO :
Code:
1 2 3 4 5 6 7 8 9 10
| public class PersonneDAO {
public List<Personne> getPersonnes() {
List<Personne> pers = new ArrayList<>();
pers.add(new Personne("Nom1", "prenom1"));
pers.add(new Personne("Nom2", "prenom2"));
pers.add(new Personne("Nom3", "prenom3"));
return pers;
}
} |
Je vous remercie de m'avoir lu et si quelqu'un à une idée ...
Je vous souhaite une bonne journée.
Neo