IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Persistance des données Java Discussion :

Projet Info : logiciel de gestion


Sujet :

Persistance des données Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Par défaut Projet Info : logiciel de gestion
    Bonjour à tous !

    Je me présente je m'appelle Corentin, je suis en deuxième année de prépa et nous avons un logiciel à écrire en JAVA pour le mois prochain.

    J'ai créé une fenêtre principale composée d'un JBar, d'un JTooLBar, d'un menu à gauche (JPanel) et d'une fenêtre de travail au centre (JTable). Bref, je me suis inspiré de netbeans pour le design.




    Je vous expose mon problème :
    J'ai réussi à afficher le tableur comme le le voulais (JTable) et le menu comme je le voulais. Jusque là, tout va bien. Ce que je veux faire, c'est que lorsque que l'on coche une case dans le menu affichage==>colonnes, une nouvelle colonne apparaisse dans le JTable, et que lorsque l'on décoche une case, une colonne disparaisse.
    J'utilise une base de donnée pour mémoriser l'affichage et j'ai créé une classe Affich pour faire le lien entre l'affichage du menu et l'affichage de la JTable (c'est là que je ne suis pas sûr du tout de mon coup). En tout cas, lorsque que je quitte le programme et que je le relance, les modifications que j'avais effectuée la fois d'avant ont été prises en compte. Cela signifie que le programme fonctionne ainsi que la base de donnée.

    C'est en fait au niveau de la programmation Événementielle et les histoires d'héritage que j'ai beaucoup de mal (nous n'avons eut que des cours très très basiques, et croyez-moi c'est dur d'apprendre le JAVA tout seul sur internet). Ce que je voudrai, c'est que les colonnes réagissent immédiatement à l'ordre "Apparaitre" ou "Disparaitre", sans qu'on n'ai besoin de relancer le programme.

    Place au grande lignes de code :

    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
    19
    20
    Fenetre Principale
     
    public class FenPrincipale extends JFrame
    {
        // Initialistation du séparateur Vertical
        private JSplitPane split;
     
        // Menu
        public JBar1 barre = new JBar1();
     
        //Création de notre barre d'outils
        public JToolBar1 toolBar = new JToolBar1();
     
        // Tableau principal de travail
        public Table1 t = new Table1();
     
    public FenPrincipale ()
      {
      // Je vous passe du constructeur //
        this.setVisible(true);}}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Classe Affich
    // C'est une classe qui me permet de rassembler des tonnes d'attributs relatif // à l'affichage, et de communiquer avec la BDD pour enregistrer les           // modifications.
    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
    19
    20
    21
    22
    Classe JBar1
    public class JBar1 extends JMenuBar
    {
     
        public Affich affich = new Affich();
        public JMenu fichier = new JMenu("Fichier");
        //... attributs ... //
        private JCheckBoxMenuItem affCli
     
        public JBar1()
        {    ...
    affCli.addActionListener(new StateListener());
    }
     
     
     
    class StateListener implements ActionListener{
     
    public void actionPerformed(ActionEvent e)
        {
             affich.addOneCol(((JCheckBoxMenuItem)e.getSource()).getText());
         }
    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
    19
    20
    21
     
    public class Table1 extends JPanel{
     
        public JTable tableau;
        private Affich affich = new Affich();
     
        public Table1()
        {
            //Les données du tableau
            Object[][] data = MaConnection.dataJTable(affich.nomTable, affich.listActivColAffichee);
     
            //Les titres des colonnes
    		String  title[] = affich.listTitreEntete;
     
            // Instanciation du Tableau
            tableau = new JTable(data, title);
     
            tableau.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
     
        }
    }
    Voilà, comme vous le voyez, JTable et JBar ont tout deux Affich en tant qu'attribut.

    Comment faire en sorte que lorsque j'utilise l'actionListener dans le JBar, les modifications soient faites dans JTable ?

    Devrai-je supprimer cette Classe Affich (qui me parrait bien pratique mais pas du tout indispensable) ? Sachez que j'ai aussi essayé de déclarer un Affich dans les attributs de FenPrinciaple et de le passer en argument dans JBar et Jtable

    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
    19
    20
    21
    22
    23
    24
    Fenetre Principale
    
    public class FenPrincipale extends JFrame
    {
    // Initialistation du séparateur Vertical
    private JSplitPane split;
    
    // Initialisation de Affich
    Affich a = new Affich();
    
    // Menu
    public JBar1 barre = new JBar1(a);
    
    //Création de notre barre d'outils
    public JToolBar1 toolBar = new JToolBar1(a);
    
    // Tableau principal de travail
    public Table1 t = new Table1(a);
    
    public FenPrincipale ()
    {
    // Je vous passe du constructeur //
    this.setVisible(true);}}
    mais dans cette configuration, je ne peut pas passer Affich a en argument dans le ActionListener du JBar1. D'ailleurs je ne sais pas pourquoi.

    Enfin bref, merci si vous êtes arrivé jusque là et merci encore plus si vous pouvez me répondre. Je m'en vais dormir, j'y ai passé toute la nuit A bientôt et merci de m'aider.

    Corentin

  2. #2
    Membre expérimenté Avatar de Shinzul
    Homme Profil pro
    Lecteur assidu de code source
    Inscrit en
    Janvier 2008
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lecteur assidu de code source
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2008
    Messages : 174
    Par défaut
    Ok bon voyons voir si je vais pouvoir t'aider

    Alors déja Point n°1 que j'ai vu ton Objet Affich est différent dans ta classe JBar1 et Table1, est-ce normal ? (Au vu de ce que j'ai compris de ton application il me semble que ton objet Affich devriat être partagé entre tes classes)

    Ensuite, pour pouvoir toucher l'objet affich dans ta classe JBar1 voila ce que je fais :
    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
    19
     
    public class JBar1 extends JMenuBar
    {
     
        public Affich affich = new Affich();
        public JMenu fichier = new JMenu("Fichier");
        //... attributs ... //
        private JCheckBoxMenuItem affCli
     
        public JBar1()
        {    ...
        affCli.addActionListener(new ActionListener() {
     
             public void actionPerformed(ActionEvent e) {
                 JBar1.this.affich.addOneCol(((JCheckBoxMenuItem)e.getSource()).getText());
             }
     
        });
    }
    Voila comment je permet à mon action listener de toucher des methodes ou des arguments de ma classe.

    Après reregarde pour ton objet affich et regarde au niveau des model pour les tables.
    (Je connais ta situation j'étais moi aussi en 2° année de prépa l'année dernière et mes cours de Java étais assez limités )

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Par défaut
    Super !

    Merci beaucoup.

    En me reposant un peu j'ai pu repenser à mon programme et prendre du recul. J'ai laissé tomber l'utilisation de la classe Affich, je préfère allez prendre les informations directement sur mes bases de données. Mais merci quand même pour ta réponse, car j'ai pu l'utiliser ailleurs !

    A bientot !

  4. #4
    Membre expérimenté Avatar de Shinzul
    Homme Profil pro
    Lecteur assidu de code source
    Inscrit en
    Janvier 2008
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lecteur assidu de code source
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2008
    Messages : 174
    Par défaut
    Si j'ai pu t'aider

    Nhesite pas a redemander sur les forum si tu as un problème

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Par défaut
    Bonjour !

    Je revient avec mon logiciel

    Il commence à avoir de la gueule, je finiole les détails les ptits bug.

    Je voudrai pouvoir trier les éléments de ma JTable par ordre alphabétique lorsque je clique sur une colonne du Header, exactement comme dans l'explorer Windows quand l'affichage est en mode "Liste". Pour cela, il faut que je récupère l'indice de ligne du Header et de sa colonne où j'ai cliqué.

    Pour la colonne, aucun problème j'ai réussit à récupérer l'indice. Seulement, l'indice de ligne du Header qui m'est renvoyée lorsque je clique dessus est 0.

    Or, 0 est l'indice de ligne de la première ligne du tableau. Résultat, lorsque je clique sur la première ligne du tableau, tous se passe comme si je cliquait sur le Header : le tableau se trie par ordre alphabétique de la colonne.

    Il y aurait-il un moyen que le Header n'ait pas le meme indice de ligne que la première ligne du tableau ?

    PS : je sais plus comment je me suis débrouillé, mais j'ai fait en sorte qu'on ne puisse sélectionner qu'une seule ligne à la fois dans le JTable, peut-être que ça viendrait de là ?

    Merci

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Par défaut
    Salut !

    Je viens de tomber par hasard sur la solution qui est plus que très très simple :

    table.setAutoCreateRowSorter(true);


    Voilà, pas besoin de chopper le numéro de la ligne, pour ensuite remettre à jour la table SQL et tout réafficher :p

    Si ça peut aider le prochain qui fait ses recherches comme moi sur google

    A bientot !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Projet de logiciel de gestion de cartes à jouer
    Par maniacs dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 31/12/2012, 11h58
  2. [Outil] Logiciel de gestion de projets
    Par tyag dans le forum Gestion de projet
    Réponses: 5
    Dernier message: 05/07/2011, 17h39
  3. Logiciel de gestion de projet
    Par bguihal dans le forum Windows
    Réponses: 5
    Dernier message: 24/03/2007, 16h33
  4. Réponses: 2
    Dernier message: 31/05/2006, 14h37
  5. [SGBD Libres] Conseils pour un projet de logiciel de gestion
    Par nh2 dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 30/01/2006, 08h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo