Ajouter noeuds dans Jtree définitivement

Kilkenny95 Messages postés 178 Statut Membre -  
tarek_dotzero Messages postés 834 Statut Membre -
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.
A voir également:

2 réponses

tarek_dotzero Messages postés 834 Statut Membre 122
 
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
Kilkenny95 Messages postés 178 Statut Membre
 
Je vais y jeter un coup d'oeil merci !!
0
Kilkenny95 Messages postés 178 Statut Membre
 
Je t'avoue que j'ai lu...Mais je vois pas comment l'adapter à mon code
0
tarek_dotzero Messages postés 834 Statut Membre 122
 
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.
0
jordane45 Messages postés 40050 Date d'inscription   Statut Modérateur Dernière intervention   4 758
 
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..

0
Kilkenny95 Messages postés 178 Statut Membre
 
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 ?
0