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