Gestion de jpanel à partir d'un bouton

Résolu/Fermé
sansordi Messages postés 80 Date d'inscription lundi 19 novembre 2007 Statut Membre Dernière intervention 23 janvier 2018 - 27 mai 2017 à 16:48
Felice_ Messages postés 265 Date d'inscription mardi 25 avril 2017 Statut Membre Dernière intervention 20 juillet 2017 - 28 mai 2017 à 12:25
Bonjour !

Voila je suis en train de développer mon logiciel mais étant amateur, il me manque quelques notions que je n'arrive pas à trouver.



// 1ere class : Fenêtre du logiciel avec un conteneur général qui servira de support autres conteneurs
public class 1 extends javax.swing.JFrame {
private javax.swing.JPanel contPrincipal;

public 1 () {
initComponents();
add(contPrincipal);
2 Panel2 = new 2();
contPrincipal.add(Panel2);

}
}

// 2eme class : Jpanel contenant un tableau avec BDD... et un bouton pour ajout de nouveau client
public class 2 extends javax.swing.JPanel{
private javax.swing.JBtutton nouveauClient;

public 2 () {
initComponents();
add(nouveauClient);
}
private void nouveauClient_jBtnActionPerformed(java.awt.event.ActionEvent evt) {
// je ne suis déjà pas très sur de cette manip mais cela fonctionne
1 logiciel = new 1();
4 nClient = 4(logiciel, true);
nClient.setVisible(true);
}
}


// 3eme class : jPanel contenant des informations sur le client
public class 3 extends javax.swing.JPanel{
public 3 () {
initComponents();
}
}


// 4eme class : dont le but est de rentrer les nouvelles données clients
public class 4 extends javax.swing.JDialog {
private javax.swing.JBtutton valider;
public 4 (java.awt.Frame parent, boolean modal){
super(parent, modal);
initComponents();
}
}



En gros, je souhaiterais que lorsque j'appuie sur mon bouton valider de ma fenêtre de dialogue, mon panel contPrincipal retire le panel de ma class 2 et ajoute celui de la class 3.
Sauf que je n'ai aucune idée de comment coder mon ActionPerformed pour que cela fonctionne.

J'avais essayé ca mais ca ne fonctionne pas (j'avais passé mon contPrincipal en public) :


public class 4 extends javax.swing.JDialog {
private javax.swing.JBtutton valider;

public 4 (java.awt.Frame parent, boolean modal){
super(parent, modal);
initComponents();
}

private void valider_jBtnActionPerformed(java.awt.event.ActionEvent evt) {
1 logiciel = new 1(); // forcement ici il prend en compte une nouvelle fenêtre autre que celle déjà existante
3 panel3 = new 3();
1.contPrincipal_jPnl.removeAll();
1.contPrincipal_jPnl.add(panel3);
1.contPrincipal_jPnl.validate();
1.contPrincipal_jPnl.repaint();
dispose();
}




J'espère ne pas demander l'impossible, sinon je vais devoir tout revoir ^^.
Merci de votre aide !

1 réponse

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
27 mai 2017 à 19:11
Bonjour,

Déjà ce serait bien de respecter les conventions de nommage Java.
Je ne sais pas comment tu fais pour tester ton code, mais c'est normalement impossible d'avoir un nom qui commence par un chiffre, donc
class 1
ou
1 logiciel = new 1();
ce n'est pas du Java...

Ensuite il faut te servir des imports, avoir toujours les classes pleinement nommées rend le code difficile à lire car ce sont des informations superflues qui empêchent de saisir l'essentiel du code.

Ça plus d'autres erreurs du genre JBtutton au lieu de JButton, 4 nClient = 4(logiciel, true); sans le new, sans parler de la méthode initComponents() que tu utilises partout mais n'est défini nul part.

Bref, tu n'as pas testé ton code, c'est impossible, et ce serait quand même un minimum avant de nous demander pourquoi ça ne fonctionne pas...
2
sansordi Messages postés 80 Date d'inscription lundi 19 novembre 2007 Statut Membre Dernière intervention 23 janvier 2018
27 mai 2017 à 22:07
En effet, ce code ne fonctionne pas pour la simple raison que je n'ai pas fais un copié collé du mien mais j'ai réécris les éléments les plus importants, et excuse moi pour la faute de frappe!

Bref, pour faire ce genre de réponse ca vole pas haut chez toi...

Je ne demande pas une solution toute prête mais des indices à tester pour ceux qui veulent bien faire l'effort de comprendre le principe de ma question...

Passes ton chemin si ce n'est pas a ta hauteur!
0
Felice_ Messages postés 265 Date d'inscription mardi 25 avril 2017 Statut Membre Dernière intervention 20 juillet 2017 11
27 mai 2017 à 22:59
Du calme…

Tu as en effet énormément d'erreur sansordi. Les remarques de KX même si elles te plaisent pas sont bonnes…

Un début de correction est :
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JDialog;
import java.awt.event.ActionEvent;
import java.awt.Frame;

// 1ere class : Fenêtre du logiciel avec un conteneur général qui servira de support autres conteneurs
public class C1 extends JFrame {
    private JPanel contPrincipal;
    
    public C1() {
        initComponents();
        add(contPrincipal);
        
        contPrincipal.add(new C2());
    }
}

// 2eme class : Jpanel contenant un tableau avec BDD... et un bouton pour ajout de nouveau client
public class C2 extends JPanel {
    private JButton nouveauClient;
    
    public C2() {
        initComponents();
        add(nouveauClient);
    }
     
    private void nouveauClient_jBtnActionPerformed(ActionEvent evt) {
        new C4(new C1(), true).setVisible(true);
    } 
}

// 3eme class : jPanel contenant des informations sur le client
public class C3 extends JPanel {
    public C3 () {
        initComponents();
    }
}

// 4eme class : dont le but est de rentrer les nouvelles données clients
public class C4 extends JDialog {
    private JButton valider;
    private Frame logiciel;
    
    public C4 (Frame parent, boolean modal){
        super(parent, modal);
        initComponents();
        
        logiciel = parent;
    }
    
    private void valider_jBtnActionPerformed(ActionEvent evt) {
        logiciel.contPrincipal_jPnl.removeAll();
        logiciel.contPrincipal_jPnl.add(new C3());
        logiciel.contPrincipal_jPnl.validate();
        logiciel.contPrincipal_jPnl.repaint();
        dispose();        
    }
}
0
sansordi Messages postés 80 Date d'inscription lundi 19 novembre 2007 Statut Membre Dernière intervention 23 janvier 2018 > Felice_ Messages postés 265 Date d'inscription mardi 25 avril 2017 Statut Membre Dernière intervention 20 juillet 2017
28 mai 2017 à 01:03
Merci de ta réponse, en effet il y avait pas mal d'erreur. En ce qui concerne les importations, Netbeans les gère pour moi, donc ce n'est vraiment pas la source du problème...

En ce qui concerne ta proposition, dans la classe C4, contPrincipal ne peut pas être appeler ainsi, cela renvoie une erreur.
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019 > sansordi Messages postés 80 Date d'inscription lundi 19 novembre 2007 Statut Membre Dernière intervention 23 janvier 2018
28 mai 2017 à 01:11
contPrincipal ne peux pas être appelé car il est private, mais de toute façon dans C4 c'est contPrincipal_jPnl qui est utilisé donc ça ne porte pas le même nom.

Après ce qu'il faut voir c'est que le temps qu'on va consacrer à faire marcher ton code on ne va pas pouvoir le consacrer à répondre à ta question.

Alors que si ton code fonctionnait on pourrait tester et te répondre tout de suite
0
Felice_ Messages postés 265 Date d'inscription mardi 25 avril 2017 Statut Membre Dernière intervention 20 juillet 2017 11 > sansordi Messages postés 80 Date d'inscription lundi 19 novembre 2007 Statut Membre Dernière intervention 23 janvier 2018
Modifié le 28 mai 2017 à 01:26
Désolé mais je n'ai sur le moment pas vraiment cherché à comprendre ce que ton programme fait…

Ta méthode « initComponents » semble lié a ton ide « Netbeans », jusque là ok.

En revanche je me demande sur le moment d'où elle sort ta propriété « contPrincipal_jPnl » ?

De même au niveau de
new C4(new C1(), true).setVisible(true);


C'est bien une nouvelle instance de la classe C1 que tu as besoin ?
0