Bonjour à tous,
je débute dans le Java notamment dans l'utilisation de Swing. J'ai besoin d'un renseignement : comment faire pour changer l'intitulé d'un bouton à chaque clic (dans mon programme: "GO !"/"Stop"). On m'a dit que je devais utiliser setText() dans actionPerformed mais n'arrivant pas à faire apparaitre le bouton "Stop" on m'a dit d'utiliser validate() mais comment quelque soit l'endroit où je le mets (dans ajoute0 ou dans actionperformed )ça ne marche pas ! Il manque quelque chose mais quoi.
Je vous fourni mon code avec en gras les endroits où le problème se situe.
J'attends votre aide précieuse avec impatience car ce problème me bloque pour la suite.
Merci![]()
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.lang.String;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.NoSuchElementException;
class TestCommande extends JFrame implements ActionListener
{
JLabel label = new JLabel("Bienvenue: vous pouvez tester les boutons");
JComboBox choix =new JComboBox();
// Constructeur de la classe
TestCommande()
{
// Création des panneaux Nord (où sera le clavier virtuel) et Sud (où se trouve le panneau de commande)
JPanel pNorth = new JPanel();
JPanel pSouth = new JPanel();
// Conteneur : contient l'ensemble des composants de l'interface utilisateur
Container interieur = getContentPane();
// Contenu des Label pour le panneau Nord : ma photo tient la place du futur clavier virtuel
ImageIcon photo = new ImageIcon("Hilton.JPG");
JLabel label2 =new JLabel(photo);
pNorth.add(label2);
pNorth.add(new JLabel("C'est ici que se situera le clavier virtuel"));
ajoute2("Espace vide", pNorth);
// On divise le panneau Sud en une grille de 2 lignes sur 12 colonnes
pSouth.setLayout(new GridLayout(2, 12));
//pSouth.setBorder(BorderFactory.createTitledBorder("Panneau de Commande :"));
pSouth.setBorder(BorderFactory.createMatteBorder(15, 15, 15, 15, Color.blue));
// Les boutons et labels (remplissant la grille) du panneau Sud
ajoute0("GO !", pSouth);
pSouth.add(new JTextField("Optimiser un clavier",10));
pSouth.add(new JTextField("35",10));
pSouth.add(new JTextField("Bigramme",10));
pSouth.add(new JTextField("Libre",10));
pSouth.add(new JTextField("100",10));
pSouth.add(new JTextField("0.1",10));
pSouth.add(new JTextField("20",10));
ajoute1("Graphique", pSouth);
ajoute3("Nbre générations :", pSouth);
ajoute3("0", pSouth);
ajoute4("Reset", pSouth);
ajoute("Mode", pSouth);
ajoute("Taille min", pSouth);
ajoute("Eléments", pSouth);
ajoute("Forme", pSouth);
ajoute("Population", pSouth);
ajoute("Mutation", pSouth);
ajoute("Elitisme", pSouth);
ajoute3("", pSouth);
ajoute3("Performance :", pSouth);
ajoute3("0", pSouth);
// Ajout des panneaux au conteneur
interieur.add(pSouth, BorderLayout.CENTER);
interieur.add(label, BorderLayout.SOUTH);
interieur.add(pNorth, BorderLayout.NORTH);
}
void ajoute(String s, JPanel pSouth)
{
// Permet l'utilisation des boutons
JButton bouton = new JButton(s);
bouton.setBackground(Color.yellow);
bouton.setActionCommand(s);
bouton.addActionListener(this);
pSouth.add(bouton);
}
//Permet l'utilisation du bouton "GO !"
void ajoute0(String s, JPanel pSouth)
{
JButton b = new JButton(s);
b.setBackground(Color.green);
//Font f = new Font ("TimesRoman", Font.BOLD, 18) ;
b.setActionCommand(s);
b.addActionListener(this);
pSouth.add(b);
//pSouth.validate();
}
//Permet l'utilisation du bouton "Graphique"
void ajoute1(String s, JPanel pSouth)
{
ImageIcon img = new ImageIcon("gph.jpeg");
JButton bt = new JButton("Graphique", img);
bt.setActionCommand(s);
bt.addActionListener(this);
pSouth.add(bt);
}
void ajoute2(String s, JPanel pNorth)
{
JLabel espace = new JLabel(s, JLabel.CENTER);
pNorth.add(espace);
}
//Représentation des label (performance et nbre de générations)
void ajoute3(String s, JPanel pSouth)
{
JLabel espace = new JLabel(s, JLabel.CENTER);
espace.setBackground(Color.red);
espace.setOpaque(true);
pSouth.add(espace);
}
//Permet l'utilisation du bouton "Reset"
void ajoute4(String s, JPanel pSouth)
{
JButton reset = new JButton(s);
reset.setForeground(Color.white);
reset.setBackground(Color.black);
reset.setActionCommand(s);
reset.addActionListener(this);
pSouth.add(reset);
}
// Réponse à l'utilisation des boutons : quel type de fenêtre de dialogue va s'ouvrir après avoir cliqué sur un bouton
public void actionPerformed(ActionEvent e)
{
JButton b = new JButton("GO !");
String nom = e.getActionCommand();
if (nom.equals("GO !"))
{
/*JOptionPane.showMessageDialog(this, "C'est parti! Vous devez appuyer sur 'Stop' pour modifier les paramètres",
"Lancement du programme",
JOptionPane.PLAIN_MESSAGE);*/
b.setText("Stop");
b.setBackground(Color.red);
b.setOpaque(true);
b.setEnabled(true);
validate();
}
else if (nom.equals("Stop"))
{
JOptionPane.showMessageDialog(this, "C'est fini!",
"Lancement du programme",
JOptionPane.PLAIN_MESSAGE);
//JButton b = new JButton("GO !");
}
else if (nom.equals("Elitisme"))
{
String reponse;
String message = "20 ";
reponse = JOptionPane.showInputDialog("Changez le taux d'élitisme : 1/", message);
label.setText(reponse);
}
else if (nom.equals("Mutation"))
{
String reponse;
String message = "0.1";
reponse = JOptionPane.showInputDialog("Changez le taux de mutation : ", message);
label.setText(reponse);
}
else if (nom.equals("Taille min"))
{
String reponse;
String message = "35";
reponse = JOptionPane.showInputDialog("Modifiez la taille minimale d'une touche en pixels : ", message);
label.setText(reponse);
}
else if (nom.equals("Eléments"))
{
/*boolean ok = false;
JFileChooser fc = new JFileChooser();
fc.setDialogTitle("Indiquez le chemin vers le fichier des bigrammes");
demande du chemin vers le fichier des bigrammes
while (!ok){
int returnVal = fc.showOpenDialog(cont);
try{
if (returnVal == JFileChooser.APPROVE_OPTION) {
fichierBigramme = fc.getSelectedFile().getPath();
ok = true;
}
else{
throw new AnnuleException("erreur fichier bigramme non choisit");
}
}catch(AnnuleException ae){
JOptionPane.showMessageDialog(cont, ae);
}
} */
String reponse;
String message = "Entrez un nouveau fichier des éléments: ";
reponse = JOptionPane.showInputDialog(this, message);
label.setText(reponse);
}
else if (nom.equals("Graphique"))
{
JOptionPane.showMessageDialog(this,
"Voici le graphique représentant l'évolution de la population : ",
"salut",
JOptionPane.PLAIN_MESSAGE);
}
else if (nom.equals("Reset"))
{
int reponse = JOptionPane.showConfirmDialog(this,
"Voulez-vous vraiment relancer le programme en gardant les mêmes paramètres ?",
"Attention",
JOptionPane.YES_NO_OPTION);
if (reponse == JOptionPane.YES_OPTION) label.setText("Nouvelle donne");
else if (reponse == JOptionPane.NO_OPTION) label.setText("Retour");
else label.setText("ni l'un ni l'autre ?");
}
else if (nom.equals("Forme"))
{
//String reponse; /*Avec InputDialog on a une ligne de texte : utile s'il faut importer un fichier forme (autre que les 3 proposés)*/
//reponse = JOptionPane.showInputDialog(null, choix, "Choisissez la forme du clavier :", JOptionPane.PLAIN_MESSAGE);
//label.setText(reponse);
JOptionPane.showMessageDialog(null, choix, "Choisissez la forme du clavier :", JOptionPane.PLAIN_MESSAGE);
JPanel panneau = new JPanel();
choix.addItem("libre");
choix.addItem("azerty");
choix.addItem("rectangulaire");
panneau.add(choix);
/*String laforme;
choix.getSelectedItem();
laforme = choix.setSelectedItem();
JTextField allez = new JTextField(laforme, 10);*/
//panneau.add(choix);
//JPanel panneau2 = new JPanel();
//setLayout(new BorderLayout(15, 15));
//add(panneau, BorderLayout.CENTER);
}
else if (nom.equals("Mode"))
{
JOptionPane.showMessageDialog(this, "Optimiser ou Tester ?",
"salut",
JOptionPane.PLAIN_MESSAGE);
}
else if (nom.equals("Population"))
{
String reponse;
String message = "100";
reponse = JOptionPane.showInputDialog("Modifiez le nombre d'individus de la population : ", message);
label.setText(reponse);
}
}
//private void EssaiChoixTest() {
//JPanel panneau = new JPanel();
//choix.Item("libre");
//choix.Item("azerty");
//choix.Item("rectangulaire");
//panneau.add(choix);
//setLayout(new BorderLayout(15, 15));
//add(panneau, BorderLayout.CENTER);
//}
// fonction principale permettant l'affichage de l'interface
public static void main(String[] argv)
{
System.out.println("Chargement en cours...");
JFrame monCadre = new TestCommande();
//JFrame monC = new JFrame();
monCadre.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
monCadre.pack();
monCadre.setTitle("Clavier et Panneau de contrôle");
monCadre.setSize(1280, 980);
monCadre.setVisible(true);
/*monC.setContentPane(new EssaiChoix());
monC.pack();
monC.setTitle("Choississez la forme du clavier : ");
monC.setSize(300, 200);
monC.setVisible(true);*/
}
}
Partager