Je m'entraîne à dessiner une forme sur un JPanel en cliquant sur un bouton J, mais je ne peux pas. Cela fait cinq heures que je navigue sur le Web, mais je ne trouve pas le moyen de le faire. C'est ce que je veux faire: si je clique sur le bouton "Rectangle" un rectangle apparaît sous les boutons et si je clique sur le bouton "Cercle" un cercle apparaît.Comment dessiner une forme sur JPanel en utilisant ActionListener?
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Shape extends JFrame {
JButton rec, circle;
static String botSelected;
Shape(){
frameSet();
}
void frameSet(){
JFrame frame = new JFrame();
frame.setVisible(true);
frame.setSize(600,300);
rec = new JButton ("Rectangle");
circle = new JButton("Circle");
JPanel panel = new JPanel();
frame.add(panel);
panel.add(rec);
panel.add(circle);
Click clk = new Click();
rec.addActionListener(clk);
circle.addActionListener(clk);
}
public void paint (Graphics g){
super.paint(g);
if (botSelected.equals("Rectangle"))
g.fillRect(50,50,50,50);
else if (botSelected.equals("Circle"))
g.fillOval(50,50,50,50);
}
public static void main (String [] arg){
Shape s = new Shape();
}
}
class Click implements ActionListener{
public void actionPerformed (ActionEvent e){
Shape.botSelected = e.getActionCommand();
}
}
Vous devez appeler repeindre pour que les modifications apparaissent. Ce code est jonché de tant de mauvaises pratiques. Pourquoi étendez-vous JFrame? Vous ne devriez pas nommer votre classe 'Shape' parce que c'est une classe dans awt, ie' java.awt.Shape' – matt
La première chose que je ferais est de lire [Painting in Swing] (http: // www. oracle.com/technetwork/java/painting-140037.html) et [Effectuer une peinture personnalisée] (https://docs.oracle.com/javase/tutorial/uiswing/painting/) pour mieux comprendre le fonctionnement du processus de peinture. Comme recommandation générale, j'éviterais 'static', ce n'est pas une solution pour la communication d'objet croisé – MadProgrammer