J'ai une affectation qui demande à une balle de se déplacer sur l'écran en fonction du bouton sur lequel l'utilisateur clique et de l'alternance du rouge et du vert avec le clic d'un autre bouton. Tout fonctionne mais le changement de couleur. J'ai un auditeur et une classe réagissant au clic de bouton mais je ne semble pas obtenir un changement. Existe-t-il un moyen meilleur/plus simple d'accomplir cela?Changement de couleur d'outil à l'aide d'un écouteur d'actions
Merci d'avance pour l'aide!
Code I ont:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Lab2b extends JFrame {
Lab2b(){
setTitle("Lab 2");
Lab2Panel p = new Lab2Panel();
add(p);
}
public static void main(String[] args){
Lab2b frame = new Lab2b();
frame.setTitle("Lab 2 - Ball Mover ");
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 400);
frame.setVisible(true);
}
}
class Lab2Panel extends JPanel{
Lab2Button canvas = new Lab2Button();
JPanel panel = new JPanel();
Lab2Panel() {
setLayout(new BorderLayout());
JButton leftButton = new JButton("left");
JButton rightButton = new JButton("right");
JButton upButton = new JButton("up");
JButton downButton = new JButton("down");
JButton colorButton = new JButton("Change Color");
panel.add(leftButton);
panel.add(rightButton);
panel.add(upButton);
panel.add(downButton);
panel.add(colorButton);
this.add(canvas, BorderLayout.CENTER);
this.add(panel, BorderLayout.SOUTH);
leftButton.addActionListener(new LeftListener(canvas));
rightButton.addActionListener(new RightListener(canvas));
upButton.addActionListener(new UpListener(canvas));
downButton.addActionListener(new DownListener(canvas));
colorButton.addActionListener(new ColorChangeListener(canvas));
}
}
class Lab2Button extends JPanel {
int radius = 5;
int x = -1;
int y = -1;
protected void paintComponent(Graphics g){
if (x<0 || y<0) {
x = getWidth()/2 - radius;
y = getHeight()/2 - radius;
}
super.paintComponent(g);
g.setColor(Color.RED);
g.drawOval(x,y, 2 * radius, 2 * radius);
}
public void moveLeft(){
x -= 5;
this.repaint();
}
public void moveRight(){
x += 5;
this.repaint();
}
public void moveUp(){
y -= 5;
this.repaint();
}
public void moveDown(){
y += 5;
this.repaint();
}
public void colorChange(){
this.repaint();
}
}
class LeftListener implements ActionListener{
private Lab2Button canvas;
LeftListener(Lab2Button canvas) {
this.canvas = canvas;
}
public void actionPerformed(ActionEvent e){
canvas.moveLeft();
}
}
class RightListener implements ActionListener{
private Lab2Button canvas;
RightListener(Lab2Button canvas) {
this.canvas = canvas;
}
public void actionPerformed(ActionEvent e){
canvas.moveRight();
}
}
class UpListener implements ActionListener{
private Lab2Button canvas;
UpListener(Lab2Button canvas) {
this.canvas = canvas;
}
public void actionPerformed(ActionEvent e){
canvas.moveUp();
}
}
class DownListener implements ActionListener{
private Lab2Button canvas;
DownListener(Lab2Button canvas) {
this.canvas = canvas;
}
public void actionPerformed(ActionEvent e){
canvas.moveDown();
}
}
class ColorChangeListener implements ActionListener {
private Lab2Button canvas;
ColorChangeListener(Lab2Button canvas) {
this.canvas = canvas;
}
public void actionPerformed(ActionEvent e){
canvas.colorChange();
}
}
Mouvement Bouton Listener Code de classe:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Lab2MoveBallListener extends Lab2Button implements ActionListener {
public void actionPerformed(ActionEvent e){
this.moveLeft();
}
}
D'accord, a changé ce code:
public void colorChange(){
this.repaint();
}
Pour cela et il des erreurs sur la compilation avec: erreur: impossible de trouver le symbole if (g.getColor() = Color.RED) {
public void colorChange(){
if (g.getColor() = Color.RED){
g.setColor(Color.GREEN);
}
else{
g.setColor(Color.RED);
}
this.repaint();
}