Graphics - Ajouter des figures sans effacer les précedentes
Résolu
sansordi
Messages postés
80
Date d'inscription
Statut
Membre
Dernière intervention
-
sansordi Messages postés 80 Date d'inscription Statut Membre Dernière intervention -
sansordi Messages postés 80 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je commence seulement à mettre mon nez dans java Graphics, et après avoir eu un peu de mal à saisir la manière de procéder pour mon projet, je suis face à une nouvelle problématique et je peine à trouver des informations...
L'idée est de créer un mini "paint" sur une partie de mon projet. Je souhaiterais que mon application affiche par défaut un cercle sur mon jpanel, puis que l'utilisateur puisse rajouter des points de couleurs/ tailles différentes sans que cela efface le cercle initiale ou les points que l'utilisateur à déjà ajouter.
Le problème avec ce code, c'est qu'il redessine à chaque fois la figure et donc ne position qu'un seul point vert au lieu d'un point à chaque clic.
Pour modifier la taille et la couleur des points, j'ai déjà une belle idée de comment procéder (sélection sur des jbutton etc..) donc ce n'est pas la question ;).
ps: je travail sous netbeans, une partie du code est auto-généré (initComponents() inclu juste la création du jpanel et le listener de la souris)
Merci d'avance,
Je commence seulement à mettre mon nez dans java Graphics, et après avoir eu un peu de mal à saisir la manière de procéder pour mon projet, je suis face à une nouvelle problématique et je peine à trouver des informations...
L'idée est de créer un mini "paint" sur une partie de mon projet. Je souhaiterais que mon application affiche par défaut un cercle sur mon jpanel, puis que l'utilisateur puisse rajouter des points de couleurs/ tailles différentes sans que cela efface le cercle initiale ou les points que l'utilisateur à déjà ajouter.
import java.awt.Color; import java.awt.Graphics; public class img extends javax.swing.JPanel { public img() { initComponents(); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.BLACK); g.drawOval(28, 28, 120, 120); if (choix == 1) { g.setColor(Color.GREEN); g.fillOval(X, Y, 5, 5); } } private void formMouseClicked(java.awt.event.MouseEvent evt) { choix = 1; X = evt.getX(); Y = evt.getY(); repaint(); } int choix =0; int X; int Y; }
Le problème avec ce code, c'est qu'il redessine à chaque fois la figure et donc ne position qu'un seul point vert au lieu d'un point à chaque clic.
Pour modifier la taille et la couleur des points, j'ai déjà une belle idée de comment procéder (sélection sur des jbutton etc..) donc ce n'est pas la question ;).
ps: je travail sous netbeans, une partie du code est auto-généré (initComponents() inclu juste la création du jpanel et le listener de la souris)
Merci d'avance,
A voir également:
- Graphics - Ajouter des figures sans effacer les précedentes
- Effacer les données de navigation sur android - Guide
- Effacer les cookies - Guide
- Comment effacer les messages sur google - Guide
- Amd radeon tm graphics - Forum jeux en ligne
- Ajouter signature word - Guide
1 réponse
Bonjour,
C'est normal qu'il redessine puisque tu fait un
Même si tu pourrais demander à ne redessiner qu'une partie de la fenêtre avec
Le vrai problème c'est que tu ne stockes pas les valeurs qu'il faudrait redessiner, X et Y c'est bien pour un seul point, mais si tu veux tout l'historique il faut les conserver.
Exemple :
Remarque : "je travail sous netbeans, une partie du code est auto-généré"
C'est une mauvaise idée pour apprendre à programmer, parce que du coup tu ne peux pas comprendre ce qu'il se cache derrière...
C'est normal qu'il redessine puisque tu fait un
repaint();(c'est un peu le but de la méthode...)
Même si tu pourrais demander à ne redessiner qu'une partie de la fenêtre avec
repaint(0, x, y, width, height);
Le vrai problème c'est que tu ne stockes pas les valeurs qu'il faudrait redessiner, X et Y c'est bien pour un seul point, mais si tu veux tout l'historique il faut les conserver.
Exemple :
import java.awt.Point; import java.util.List; import java.util.ArrayList;
private final List<Point> points = new ArrayList<>();
for (Point point : points) g.fillOval(point.x, point.y, 5, 5);
points.add(new Point(evt.getX(), evt.getY());
Remarque : "je travail sous netbeans, une partie du code est auto-généré"
C'est une mauvaise idée pour apprendre à programmer, parce que du coup tu ne peux pas comprendre ce qu'il se cache derrière...
En effet, passer par une ArrayList simplifie les choses et permet le stockage des données, je n'y pense pas encore suffisamment... et pourtant !
(Redessiner une partie de la fenêtre n'est pas approprié pour ce projet, enfin me semble-t-il, dù au risque de superposition.)
Pour Netbeans, je sais bien que ce n'est pas le top, mais comme j'avais beaucoup d'éléments graphiques à positionner sans avoir une seule idée du rendu final, cela m'a permis de faire la maquette de mon projet tout apprenant à coder le reste. Aujourd'hui je suis sur la fin de mon projet grâce à Netbeans. Sans lui, je serai encore en train de me demander à quoi aller ressembler mon appli... Donc oui, je suis encore plus que débutant en BorderLayout et compagnie, mais mon projet est en train de voir le jour ;).
Pour être parti de 0 (je ne savais même pas écrire le fameux "Hello World"...), aujourd'hui j'ai une app qui fait de la gestion de client.