Menu

Ajouter noeuds dans Jtree définitivement

Messages postés
89
Date d'inscription
lundi 24 septembre 2018
Dernière intervention
14 mars 2019
- - Dernière réponse : tarek_dotzero
Messages postés
778
Date d'inscription
jeudi 19 juillet 2007
Dernière intervention
7 mars 2019
- 7 mars 2019 à 02:00
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.
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
778
Date d'inscription
jeudi 19 juillet 2007
Dernière intervention
7 mars 2019
145
1
Merci
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.

http://www.adam-bien.com/roller/abien/entry/java_7_writing_a_string

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 49378 internautes nous ont dit merci ce mois-ci

Kilkenny95
Messages postés
89
Date d'inscription
lundi 24 septembre 2018
Dernière intervention
14 mars 2019
-
Je vais y jeter un coup d'oeil merci !!
Kilkenny95
Messages postés
89
Date d'inscription
lundi 24 septembre 2018
Dernière intervention
14 mars 2019
-
Je t'avoue que j'ai lu...Mais je vois pas comment l'adapter à mon code
tarek_dotzero
Messages postés
778
Date d'inscription
jeudi 19 juillet 2007
Dernière intervention
7 mars 2019
145 -
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.
Commenter la réponse de tarek_dotzero
Messages postés
24961
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 mars 2019
1896
0
Merci
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..

Kilkenny95
Messages postés
89
Date d'inscription
lundi 24 septembre 2018
Dernière intervention
14 mars 2019
-
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 ?
Commenter la réponse de jordane45