Ajouter noeuds dans Jtree définitivement

Fermé
Kilkenny95 Messages postés 157 Date d'inscription lundi 24 septembre 2018 Statut Membre Dernière intervention 31 août 2020 - 26 févr. 2019 à 13:25
tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 - 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.
A voir également:

2 réponses

tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 120
2 mars 2019 à 00:39
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 157 Date d'inscription lundi 24 septembre 2018 Statut Membre Dernière intervention 31 août 2020
4 mars 2019 à 08:37
Je vais y jeter un coup d'oeil merci !!
0
Kilkenny95 Messages postés 157 Date d'inscription lundi 24 septembre 2018 Statut Membre Dernière intervention 31 août 2020
4 mars 2019 à 09:14
Je t'avoue que j'ai lu...Mais je vois pas comment l'adapter à mon code
0
tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 120
7 mars 2019 à 02:00
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 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
26 févr. 2019 à 14:19
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 157 Date d'inscription lundi 24 septembre 2018 Statut Membre Dernière intervention 31 août 2020
27 févr. 2019 à 09:09
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