Un souci avec les actionListener et JPanel
Bonjour à tous.
Je débute actuellement avec les interfaces graphiques en java et j'ai quelques soucis avec l'utilisation d'un actionListener.
Tout d'abord, voilà le code, je vous expliquerais ce que je veux faire ensuite.
La Classe Traitement implémentée d'actionListener qui redéfinit la méthode actionPerformed
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| package p_fenetre;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JLabel;
public class Traitement implements ActionListener {
private int i = 1;
JLabel label;
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.out.println("Test No" +i);
i++;
}
} |
J'ai ensuite la classe Boutons qui me sert à initialiser des boutons
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
| package p_fenetre;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Boutons extends JButton implements MouseListener {
/**
*
*/
private static final long serialVersionUID = 1008958587886690045L;
/*Constructeur de la classe Boutons
* Le bouton s'ecoute lui meme avec l'attribut "this" dans addMouseListener
*/
public Boutons(String str){
super(str);
this.addMouseListener(this);
}
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
this.setBackground(Color.CYAN);
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
this.setBackground(new JButton().getBackground());
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
} |
Dans ma classe SideBar héritée de JPanel, j'instancie tous les boutons dont j'aurais besoin
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| package p_fenetre;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class SideBar extends JPanel implements ActionListener{
/**
*
*/
private static final long serialVersionUID = -7717883325397196472L;
//Initialisation des 6 boutons � partir de la classe Boutons
private Boutons b1 = new Boutons("Ligne Verticale");
private Boutons b2 = new Boutons("Ligne Horizontale");
private Boutons b3 = new Boutons("Ligne Oblique");
private Boutons b4 = new Boutons("Intersection Y");
private Boutons b5 = new Boutons("Intersection T");
private Boutons b6 = new Boutons("Intersection X");
//D�termination de la taille de la SideBar
Dimension tailleEcran = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
//private int hauteur = (int)(tailleEcran.getHeight()-22);
private int largeur = (int)(tailleEcran.getWidth()/4);
public SideBar(){
// Background en Gris juste pour distinguer les 2 conteneurs pdt l'elaboration de l'interface
this.setBackground(Color.LIGHT_GRAY);
//Positionnement des boutons
this.setLayout(null);
this.b1.setBounds(0,0,(this.largeur),50);
this.b2.setBounds(0,60,(this.largeur),50);
this.b3.setBounds(0,120,(this.largeur),50);
this.b4.setBounds(0,180,(this.largeur),50);
this.b5.setBounds(0,240,(this.largeur),50);
this.b6.setBounds(0,300,(this.largeur),50);
this.b1.addActionListener(new Traitement());
//Ajout dans le conteneur
this.add(b1);
this.add(b2);
this.add(b3);
this.add(b4);
this.add(b5);
this.add(b6);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
} |
Ma classe Conteneur (qui porte mal son nom en fait) qui est aussi héritée de JPanel
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| package p_fenetre;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Conteneur extends JPanel implements ActionListener{
/**
*
*/
private static final long serialVersionUID = 6620292449857381975L;
Dimension tailleEcran = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
private int hauteur = (int)(tailleEcran.getHeight()-22);
private int largeur = (int)(tailleEcran.getWidth()/4);
JLabel label = new JLabel("Test");
public Conteneur(){
this.setBackground(Color.WHITE);
this.setLayout(null);
this.label.setBounds(0,0,this.largeur*3/4,this.hauteur);
this.add(label);
}
@Override
public void actionPerformed(ActionEvent e) {
}
} |
Et ma classe Fenetre qui crée une fenêtre et s'occupe de créer un conteneur qui contiendra Conteneur et SideBar
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215
| package p_fenetre;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Fenetre extends JFrame{
/**
*
*/
private static final long serialVersionUID = -929792336357849312L;
/**
* @param args
*/
//Appel des differentes Classes
private Conteneur pan = new Conteneur();
private JPanel container = new JPanel();
private SideBar side = new SideBar();
//Initialisation des variables g�rant la taille de la fenetre
Dimension tailleEcran = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
private int hauteur = (int)tailleEcran.getHeight()-22;
private int largeur = (int)tailleEcran.getWidth();
//Initialisation de la barre MENU
private JMenuBar menuBar = new JMenuBar();
private JMenu test1 = new JMenu("Fichier");
private JMenu test1_2 = new JMenu("Sous ficher");
private JMenu test2 = new JMenu("Edition");
private JMenuItem item1 = new JMenuItem("Ouvrir");
private JMenuItem item2 = new JMenuItem("Fermer");
private JMenuItem item3 = new JMenuItem("Lancer");
private JMenuItem item4 = new JMenuItem("Arr�ter");
private JCheckBoxMenuItem jcmi1 = new JCheckBoxMenuItem("Choix 1");
private JCheckBoxMenuItem jcmi2 = new JCheckBoxMenuItem("Choix 2");
private JRadioButtonMenuItem jrmi1 = new JRadioButtonMenuItem("Radio 1");
private JRadioButtonMenuItem jrmi2 = new JRadioButtonMenuItem("Radio 2");
public Fenetre(){
//Initialisation de la fenetre
this.setTitle("WYP");
this.pack();
Fenetre.setDefaultLookAndFeelDecorated(true);
this.setExtendedState(Fenetre.MAXIMIZED_BOTH);
this.setMinimumSize(new Dimension(this.largeur,this.hauteur));
this.setLocationRelativeTo(null);
this.setResizable(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
/*REPRISE DU CODE DU SDZ POUR LES MENUS (JUSTE POUR AVOIR UNE IDEE DE CE QUE CA PEUT DONNER)*/
this.test1.add(item1);
//On ajoute les �l�ments dans notre sous-menu
this.test1_2.add(jcmi1);
this.test1_2.add(jcmi2);
//Ajout d'un s�parateur
this.test1_2.addSeparator();
//On met nos radios dans un ButtonGroup
ButtonGroup bg = new ButtonGroup();
bg.add(jrmi1);
bg.add(jrmi1);
//On pr�s�lectionne la premi�re radio
jrmi1.setSelected(true);
this.test1_2.add(jrmi1);
this.test1_2.add(jrmi2);
//Ajout du sous-menu dans notre menu
this.test1.add(this.test1_2);
//Ajout d'un s�parateur
this.test1.addSeparator();
item2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
System.exit(0);
}
});
this.test1.add(item2);
this.test2.add(item3);
this.test2.add(item4);
//L'ordre d'ajout va d�terminer l'ordre d'apparition dans le menu de gauche � droite
//Le premier ajout� sera tout � gauche de la barre de menu et inversement pour le dernier
this.menuBar.add(test1);
this.menuBar.add(test2);
//-------------------------
this.setJMenuBar(menuBar);
//Ajout des conteneurs
this.container.setBackground(Color.WHITE);
this.container.setLayout(null);
this.pan.setBounds(0,0,(this.largeur*3/4),this.hauteur);
this.side.setBounds((this.largeur*3/4),0,(this.largeur/4),(this.hauteur));
this.container.add(pan);
this.container.add(side);
this.setContentPane(this.container);
this.setVisible(true);
}
} |
Alors voilà mon problème....
J'aimerais que l'un de mes boutons que j'ai instancié dans ma classe SideBar puisse (quand je clique dessus) changer le texte d'un JLabel qui serait présent dans ma classe Conteneur....
Seulement, je dois m'emmêler les pinceaux et je n'arrive pas à réaliser cela.
Un petit coup de main serait le bienvenu et apprécié :-)
Dans l'attente de vos réponses éclairées, j'en suis sûr.