Bonjour,

Suite à un autre poste (http://www.developpez.net/forums/d15...-fichier-fxml/), j'ai constaté que je luttais un peu à mettre en place la mise à jour visuelle des données d'une tableview après l'entrée de données via une fenêtre.
La tableview est située dans un fichier fxml et est liée à un contrôleur. La fenêtre où j'entre les données est liée elle aussi à un fichier fxml et un contrôleur.
Avant toute chose, je tiens à préciser que le problème semble venir de la mise à jour graphique. En effet, si je passe par des system.out.println dans chacun des contrôleurs, je constate que la mise à jour au niveau du contenu de la tableview se fait bien. Néanmoins, visuellement, la ligne ajoutée n'apparaît pas à l'écran.

Bref, dans le poste, j'avais utilisé une méthode assez bête pour effectuer l'opération... Cette fois-ci, je passe par l'accesseur et le mutateur de la propriété userData du Stage.

Ainsi, au niveau de la méthode appelée lors de l'appui sur le bouton qui va ouvrir la fenêtre servant à insérer les données, j'ajoute un évenement onCloseRequest sur la fenêtre créée:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@FXML private void openPage(ActionEvent event) throws IOException {
        Stage stage = new Stage();
        stage.setTitle("Ajout Valeur");
        stage.setScene(new Scene(FXMLLoader.load(getClass().getResource("Popup.fxml"))));
        stage.setOnCloseRequest(new EventHandler<WindowEvent>(){

			@Override
			public void handle(WindowEvent event) {
				if(null !=stage.getUserData())
				{
					Nawak n = (Nawak) stage.getUserData();
					lsTable.get().add(n);
					stage.close();
				}
			}
        	
        });
Il est à noter que cette méthode est située dans le controlleur qui est lié au fichier fxml contenant la tableview. Cette dernière est définie comme variable lsTable.

Ensuite, au niveau du controlleur lié à la fenêtre qui est créé, lorsque l'utilisateur a entré les données et qu'il clique sur le bouton enregistrer, c'est cette méthode qui est appelée:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
    @FXML private void saveAction(ActionEvent event) throws IOException {

			Nawak n = new Nawak(coL1txt.getText(),coL2txt.getText());
			Stage st = (Stage) save.getScene().getWindow();
			st.setUserData(n);
			EventHandler<WindowEvent> eh = st.getOnCloseRequest();
			eh.handle(new WindowEvent(st, null));
		
    }
Ici, je stocke les données (entrées dans les textfields) via la méthode setUserData du Stage et je déclenche l'évenement OnClose pour qu'elles soient enregistrées au sein de la tableView. Par contre, je ne comprends pas trop pourquoi cela ne marchait pas quand je faisais avec: st.close() .

Bref, je poste ce message pour avoir votre avis sur cette procédure.

PS: Ce projet est un projet de test. Il est donc fait assez simplement et plutôt basique. Pour ce qui est des valeurs vides, je le prends bien en compte:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
	private EventHandler<KeyEvent> enabDisab = new EventHandler<KeyEvent>() {
		public void handle(KeyEvent t){
	     	if("".equals(coL1txt.getText().replace(" ", "")) ||  "".equals(coL2txt.getText().replace(" ", "")))
	     		save.setDisable(true);
	     	else
	     		save.setDisable(false);
		}
	};
 
	@FXML
	public void initialize() {		
		save.setDisable(true);
		coL1txt.setOnKeyReleased(enabDisab);
		coL2txt.setOnKeyReleased(enabDisab);				
	}