Ajouter noeuds dans Jtree définitivement [Fermé]

Signaler
Messages postés
147
Date d'inscription
lundi 24 septembre 2018
Statut
Membre
Dernière intervention
11 mars 2020
-
Messages postés
1608
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
17 avril 2020
-
Bonjour,

Je suis sur n projet de bdd et je dois ranger des composants en arborescence.

J'ai créer un Jtree pour débuter, dans le but de créer une méthode permettant d'ajouter et supprimer dynamiquement des noeuds. L'ajout se passe sans problème. Mais une fois que je ferme ma fenêtre et que j'exécute mon code à nouveau, les noeuds ajoutés juste avant on disparu. Seuls restent les noeuds que j'avais codé pour "initialiser" mon Jtree.

Comment je peux définitivement ajouter des noeuds ? Est-ce possible ? Faut il que je rentre tout ca dans une bdd ? (j'ai mysql)

Peut être qu'une fois mon programme terminer et convertie en .exe le probleme est resolu ?

Merci d'avanc.

2 réponses

Messages postés
1608
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
17 avril 2020
111
Bonjour,

Le terme utilisé pour ça est "la persistance" : https://fr.wikipedia.org/wiki/Persistance_(informatique)

Si la base de données n'est pas obligatoire alors je vous conseille d'utiliser un fichier texte. Vous pouvez lire et écrire très rapidement sans trop de complication mais vous devez trouver un moyen pour représenter la structure de l'arbre.

https://www.adam-bien.com/roller/abien/entry/java_7_writing_a_string
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 90533 internautes nous ont dit merci ce mois-ci

Messages postés
147
Date d'inscription
lundi 24 septembre 2018
Statut
Membre
Dernière intervention
11 mars 2020

Je vais y jeter un coup d'oeil merci !!
Messages postés
147
Date d'inscription
lundi 24 septembre 2018
Statut
Membre
Dernière intervention
11 mars 2020

Je t'avoue que j'ai lu...Mais je vois pas comment l'adapter à mon code
Messages postés
1608
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
17 avril 2020
111
Bonjour,

Puisque la méthode de sauvegarde n'est pas importante et pour éviter de créer une représentation entière sous forme d'une base de données, j'ai essayé un code avec la sérialisation. Je me suis basé sur l'exemple suivant :

https://www.geeksforgeeks.org/serialization-in-java/

Le premier code crée un arbre et le sauvegarde au moment de la fermeture, bien sûre vous pouvez mettre le code dans la méthode actionPerformed d'un bouton :

import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
import java.io.*;

public class SauverJTree extends JFrame {
	
	JTree arbre;
	DefaultMutableTreeNode racine;
	
	String chemin = "Exemple.dat";
	
	public SauverJTree(){
		
		setTitle("Exemple JTree");
		setSize(300, 500);
		
		racine = new DefaultMutableTreeNode("Racine");
		DefaultMutableTreeNode n1 = new DefaultMutableTreeNode("Un noeud");
		DefaultMutableTreeNode n2 = new DefaultMutableTreeNode("Un autre noeud");
		DefaultMutableTreeNode n3 = new DefaultMutableTreeNode("Un troisieme noeud");
		DefaultMutableTreeNode n4 = new DefaultMutableTreeNode("Un dernier");
		
		n1.add(n2);
		n1.add(n3);
		racine.add(n1);
		racine.add(n4);
		
		arbre = new JTree(racine);
		JScrollPane scroll = new JScrollPane(arbre);
		
		getContentPane().add(scroll);
		
		addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.out.println("Saving");
				
				try{    
            
					FileOutputStream fichier = new FileOutputStream(chemin); 
					ObjectOutputStream out = new ObjectOutputStream(fichier); 
              
            
					out.writeObject(racine); 
              
					out.close(); 
					fichier.close(); 
					
				}catch(IOException ex){ 
					ex.printStackTrace(); 
				} 
				
				System.exit(0);
			}
		});
		
	}
		
	public static void main (String args[]) {
		(new SauverJTree()).setVisible(true);
	}
}


Normalement, vous devez remarquer la création d'un fichier nomé "Exemple.dat" dans le même répertoire que la classe exécutée.

Le deuxième code lit le fichier sauvegardé :

import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
import java.io.*;

public class ChargerJTree extends JFrame {
	
	JTree arbre;
	DefaultMutableTreeNode racine;
	
	String chemin = "Exemple.dat";
	
	public ChargerJTree(){
		
		setTitle("Exemple JTree");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(300, 500);
		
		try{     
			FileInputStream fichier = new FileInputStream(chemin); 
			 ObjectInputStream in = new ObjectInputStream(fichier); 
              
			 racine = (DefaultMutableTreeNode)in.readObject(); 
              
			 in.close(); 
			fichier.close(); 
              
		 }catch(Exception ex){ 
			  ex.printStackTrace(); 
		 } 
		
		if(racine == null){
			racine = new DefaultMutableTreeNode("Vide");
		}
		
		arbre = new JTree(racine);
		JScrollPane scroll = new JScrollPane(arbre);
		
		getContentPane().add(scroll);
		
	}
	
	public static void main (String args[]) {
		(new ChargerJTree()).setVisible(true);
	}
}


Fonctionne parfaitement. Essayez de l'adapter à votre besoin.
Messages postés
28894
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 mai 2020
2 458
Bonjour,

Bien sûr qu'il faut enregistrer les données quelque part ..... sinon c'est normal qu'elles ne soient pas conservées !
Ca peut être dans un fichier, dans une BDD .. à toi de voir...
Et ensuite il faut charger les données depuis ce support et non depuis les données que tu avais codé en dur... sinon tu ne verras pas les données à jour en rechargeant ton appli..

Messages postés
147
Date d'inscription
lundi 24 septembre 2018
Statut
Membre
Dernière intervention
11 mars 2020

Merci de ta réponse, j'ai fait quelques recherches mais je ne trouve rien de probants, as tu des exemple par exemple pour sauvegarder et puis recharger mon jtree depuis une bdd mySQL ?