Voici la classe qui dessine le rectangle. Il est supposé utiliser les attributs statiques x, y pour les composants de l'emplacement du rectangle à dessiner, qui sont les composants x et y à partir d'un clic de souris. Les x, y viennent de la classe Gui3 de event.getX() et event.getY(). Le programme et toutes ses méthodes fonctionnent bien, le seul problème survient lorsque la forme est dessinée.Pourquoi le rectangle ne dessine-t-il pas où je clique?
classe pour dessiner la forme
import java.awt.*;
import javax.swing.*;
public class DrawShapes extends JPanel {
public static int x,y;
public void paintComponent(Graphics g){
g.setColor(Color.BLUE);
g.fillRect(x,y,80,80);
}
public class GuiDemo extends Gui3{
public GuiDemo(){
x=x1;
y=y1;
}
}
}
classe principale qui fait tout le reste
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Gui3 extends JFrame {
private JPanel mousepanel;
private JLabel statusbar;
public static int x1=0, y1=0;
public Gui3(){
super("The title");
mousepanel = new JPanel();
mousepanel.setBackground(Color.WHITE);
add(mousepanel, BorderLayout.CENTER);
statusbar = new JLabel("Default");
add(statusbar, BorderLayout.SOUTH);
HandlerClass handler = new HandlerClass();
mousepanel.addMouseListener(handler);
mousepanel.addMouseMotionListener(handler);
}
private class HandlerClass implements MouseListener, MouseMotionListener
{
@Override
public void mouseClicked(MouseEvent event) {
statusbar.setText(String.format("Clicked at %d, %d", event.getX(),event.getY()));
C'est là les composantes x et y sont reçus de
x1=event.getX();
y1=event.getY();
Les composants se passé à la classe DrawShapes. Le rectangle ne tire que dans le coin. Il est censé être dessiner chaque fois que je clique
DrawShapes shapes = new DrawShapes();
add(shapes);
}
@Override
public void mousePressed(MouseEvent event){
statusbar.setText("You pressed down the mouse");
}
@Override
public void mouseReleased(MouseEvent event){
statusbar.setText("You released the button");
}
@Override
public void mouseEntered(MouseEvent event){
statusbar.setText("You entered the area");
mousepanel.setBackground(Color.RED);
}
@Override
public void mouseExited(MouseEvent event){
statusbar.setText("The mouse has left the window");
mousepanel.setBackground(Color.WHITE);
}
//These are mouse motion events
@Override
public void mouseDragged(MouseEvent event){
statusbar.setText("You are dragging the mouse");
}
@Override
public void mouseMoved(MouseEvent event){
statusbar.setText("You are moving the mouse");
}
}
}
Veuillez faire en sorte que vos retraits soient lisibles et corrigez votre mise en forme. – djechlin
Je pense que vous manquez une 'repeindre quelque part –
*" Il est censé utiliser les interst x statiques, y "* - Eh bien, il y a un problème pour commencer – MadProgrammer