sebounet | Salut a tous!!
Je fais appel à votre aide rapidement, je suis tout nouveau dans la prog java.
Je suis sur un programme qui doit me dessiner des triangles lorsque je clique sur la souris a tel endroit de l ecran.
Le triangle se dessine comme il faut la ou je clique pas de pb, mais seulement lorsque je clique sur un autre endroit le nouveau triangle se dessine mais l ancien disparait.
J'ai regardé un peu partout sur google et j ai trouvé que ça se passait au niveau de la methode repaint() qui appelle la methode update qui efface l ecran a chaque fois.
Il faut donc que je redefinisse cette methode update() mais je ne sais pas comment.
j ai essayé de la mettre a plusieur endroit dans le programme mais ça marche toujours pas...ça me fait peter un cable...pour un truc aussi con...!!
Voici mon programme.
Ne faites pas attention a la classe pieces...
Code :
- package triomino;
- import javax.swing.*;
- import java.awt.*;
- import javax.swing.event.MouseInputListener;
- import java.awt.event.MouseEvent;
- /**
- * <p>Titre : TRIOMINO++</p>
-
- */
- public class UI extends JFrame {
- JPanel contentPane;
- JLabel label;
- static int GridSpace = 150;
- Piece Triangle = new Piece();
- private Point clickPoint, cursorPoint;
- public void creerUI() {
- CoordinateArea coordinateArea = new CoordinateArea(this, Triangle);
- contentPane.add(coordinateArea);
- label = new JLabel();
- resetLabel();
- contentPane.add(label);
- //Align the left edges of the components.
- coordinateArea.setAlignmentX(Component.LEFT_ALIGNMENT);
- label.setAlignmentX(Component.LEFT_ALIGNMENT); //redundant
- }
- public UI() {
- try {
- setDefaultCloseOperation(EXIT_ON_CLOSE);
- jbInit();
- } catch (Exception exception) {
- exception.printStackTrace();
- }
- }
- public void updateCursorLocation(int x, int y) {
- if (x < 0 || y < 0) {
- cursorPoint = null;
- updateLabel();
- return;
- }
- if (cursorPoint == null) {
- cursorPoint = new Point();
- }
- cursorPoint.x = x;
- cursorPoint.y = y;
- updateLabel();
- }
- public void updateClickPoint(Point p) {
- clickPoint = p;
- updateLabel();
- }
- public void resetLabel() {
- cursorPoint = null;
- updateLabel();
- }
- protected void updateLabel() {
- String text = "";
- if ((clickPoint == null) && (cursorPoint == null)) {
- text = "cliquer ou bouger le curseur dans la zone ";
- } else {
- if (clickPoint != null) {
- text += "Le Dernier clique etait au ("
- + clickPoint.x + ", " + clickPoint.y + " ). ";
- }
- if (cursorPoint != null) {
- text += "Le curseur est au ("
- + cursorPoint.x + ", " + cursorPoint.y + " ). ";
- }
- }
- label.setText(text);
- }
- public static class CoordinateArea extends JComponent implements
- MouseInputListener {
- Point point = null;
- UI controller;
- Dimension preferredSize = new Dimension(400, 500);
- Color gridColor;
- Piece Triangle;
- public CoordinateArea(UI controller, Piece Triangle) {
- this.controller = controller;
- this.Triangle = Triangle;
- //Add a border of 5 pixels at the left and bottom,
- //and 1 pixel at the top and right.
- setBorder(BorderFactory.createMatteBorder(1, 5, 5, 1,
- Color.BLUE));
- addMouseListener(this);
- addMouseMotionListener(this);
- setBackground(Color.DARK_GRAY);
- setOpaque(true);
- }
- public void update(Graphics g) {
- paint(g);
- }
- public Dimension getPreferredSize() {
- return preferredSize;
- }
- protected void paintComponent(Graphics g) {
- //Paint background if we're opaque.
- if (isOpaque()) {
- g.setColor(getBackground());
- g.fillRect(0, 0, getWidth(), getHeight());
- }
- //Paint 20x20 grid.
- g.setColor(Color.GRAY);
- drawGrid(g, GridSpace);
- //If user has chosen a point, paint a small dot on top.
- if (point != null) {
- g.setColor(getForeground());
- g.fillRect(point.x - 3, point.y - 3, 7, 7);
- DessinerTriangle(g);
- }
- }
- //Draws a 20x20 grid using the current color.
- private void drawGrid(Graphics g, int gridSpace) {
- Insets insets = getInsets();
- int firstX = insets.left;
- int firstY = insets.top;
- int lastX = getWidth() - insets.right;
- int lastY = getHeight() - insets.bottom;
- //Draw vertical lines.
- int x = firstX;
- while (x < lastX) {
- g.drawLine(x, firstY, x, lastY);
- x += gridSpace;
- }
- //Draw horizontal lines.
- int y = firstY;
- while (y < lastY) {
- g.drawLine(firstX, y, lastX, y);
- y += gridSpace;
- }
- }
- //Methods required by the MouseInputListener interface.
- public void mouseClicked(MouseEvent e) {
- int x = e.getX();
- int y = e.getY();
- if (point == null) {
- point = new Point(x, y);
- } else {
- point.x = x;
- point.y = y;
- }
- controller.updateClickPoint(point);
- repaint();
- }
-
- public void DessinerTriangle(Graphics g) {
- int[] X = new int[3];
- int[] Y = new int[3];
- X[0] = (point.x / GridSpace) % GridSpace * GridSpace;
- X[1] = (point.x / GridSpace) % GridSpace * GridSpace;
- X[2] = (point.x / GridSpace) % GridSpace * GridSpace + GridSpace;
- Y[0] = (point.y / GridSpace) % GridSpace * GridSpace;
- Y[1] = (point.y / GridSpace) % GridSpace * GridSpace + GridSpace;
- Y[2] = (point.y / GridSpace) % GridSpace * GridSpace + GridSpace;
- //Triangle.pivoterAGauche();
- //Triangle.setX(X);
- //Triangle.setY(Y);
- g.setColor(Color.red);
- g.drawPolygon(X, Y, 3);
- g.fillPolygon(X, Y, 3);
- }
- public void mouseMoved(MouseEvent e) {
- controller.updateCursorLocation(e.getX(), e.getY());
- }
- public void mouseExited(MouseEvent e) {
- controller.resetLabel();
- }
- public void mouseReleased(MouseEvent e) {}
- public void mouseEntered(MouseEvent e) {}
- public void mousePressed(MouseEvent e) {}
- public void mouseDragged(MouseEvent e) {}
- }
- /**
- * Initialisation du composant.
- *
- * @throws java.lang.Exception
- */
- private void jbInit() throws Exception {
- contentPane = (JPanel) getContentPane();
- contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.PAGE_AXIS));
- this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
- setSize(new Dimension(600, 500));
- setTitle("TRIOMINO++" );
- }
- private class Piece {
- /**
- * Définition des coordonnées du triangle en fonction de
- * la position courante de la souris.
- */
- private int[] X = new int[3];
- private int[] Y = new int[3];
- private int[] Chiffre = new int[3];
- Piece(int[] x, int[] y) {
- X = x;
- Y = y;
- }
- Piece() {
- }
- public void setChiffre(int[] chiffre) {
- Chiffre = chiffre;
- }
- public void setX(int[] x) {
- X = x;
- }
- public void setY(int[] y) {
- Y = y;
- }
- public int[] getChiffre(int[] chiffre) {
- return Chiffre;
- }
- public void pivoterADroite() {
- int aux = X[0];
- X[0] = X[1];
- X[1] = X[2];
- X[2] = aux;
- aux = Y[0];
- Y[0] = Y[1];
- Y[1] = Y[2];
- Y[2] = aux;
- aux = Chiffre[0];
- Chiffre[0] = Chiffre[1];
- Chiffre[1] = Chiffre[2];
- Chiffre[2] = aux;
- }
- public void pivoterAGauche() {
- int aux = X[0];
- X[0] = X[2];
- X[2] = X[1];
- X[1] = aux;
- aux = Y[0];
- Y[0] = Y[2];
- Y[2] = Y[1];
- Y[1] = aux;
- aux = Chiffre[0];
- Chiffre[0] = Chiffre[2];
- Chiffre[2] = Chiffre[1];
- Chiffre[1] = aux;
- }
- }
- }
|
Message édité par sebounet le 08-12-2005 à 13:46:12
|