IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques en Java Discussion :

Effacer mon dessin sur mon JPanel


Sujet :

Interfaces Graphiques en Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ergonome
    Inscrit en
    Mai 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Mai 2015
    Messages : 34
    Points : 33
    Points
    33
    Par défaut Effacer mon dessin sur mon JPanel
    Bonjour à tous!
    Je souhaite pouvoir effacer ce que je dessine en cliquant sur le JButton clear.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    public class Paint extends JDialog {
     
    	public PaintPanel p = new PaintPanel();
     
    	private JPanel panNorth = new JPanel();
    	private JPanel panWest = new JPanel();
     
    	private JButton buttonClear = new JButton("clear");
    	private JButton buttonPalette = new JButton();
    	private JButton buttonBlue = new JButton();
    	private JButton buttonRed = new JButton();
     
     
    	private JLabel position = new JLabel();
     
    	public Paint(){
    		setModal(true);
    		setSize(300,500);
    		setLocationRelativeTo(null);
     
    		//panCENTER ajouter le panel class Paint
    		p.setBackground(Color.WHITE);
    		add(p, BorderLayout.CENTER);
     
    		//panWEST creation de la palette couleur
    		buttonPalette.setLayout(new GridLayout(8,2));
    		buttonPalette.setPreferredSize(new Dimension(70, 160));
    		buttonPalette.setContentAreaFilled(false);
    		buttonPalette.setBorderPainted(false);
     
    		buttonPalette.add(buttonBlue);
    		buttonPalette.add(buttonRed);
     
    		panWest.add(buttonPalette);
    		panWest.setPreferredSize(new Dimension(50, 300));
     
    		//positionner boutons dans panel
    		add(panWest , BorderLayout.WEST);
     
    		//panWEST buttons
    		buttonBlue.setBackground(Color.BLUE);
    		buttonRed.setBackground(Color.RED);
     
    		//panNORTH
    		panNorth.add(buttonClear);
    		add(panNorth, BorderLayout.NORTH);
     
    		// Functionality buttons
    		buttonRed.addActionListener(e-> p.setDrawingColor(Color.RED));
    		buttonBlue.addActionListener(e-> p.setDrawingColor(Color.BLUE));
     
    		buttonClear.addActionListener(new ClearClick());
     
    	}
     
    	class sizeCrayon implements ActionListener{
    		private final int valeur;
     
    		public sizeCrayon (int valeur){
    			this.valeur=valeur;
    		}
     
    		public void actionPerformed(ActionEvent e) {
    			p.setCrayonSize(valeur);
    		}
     
    	}
     
    	class ChangeColor implements ActionListener{
    		private final Color color;
     
    		public ChangeColor(Color color){
    			this.color=color;
    		}
    		public void actionPerformed(ActionEvent e) {
    			p.setDrawingColor(color);
     
    		}
    	}
     
     
    	class ClearClick implements ActionListener {
    		public void actionPerformed(ActionEvent arg0){
    			p.effacer();
    		}
    	}
     
     
    	public static void main(String[] args) {
    		Paint p = new Paint();
    		p.setVisible(true);
    	}
    }
    Et voici ma deuxième classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    public class PaintPanel extends JPanel{
    	private int pointCount=0;
    	private Color currentColor;
    	private int valeur;
    	private int currentValeur=4;
    	//array of 10000java.awt.Point references
    	private DrawingPoint[]points = new DrawingPoint[10000];
    	private PaintPanel p;
    	public PaintPanel(){
    		setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.BLACK));
    		addMouseMotionListener(new MouseMotionAdapter(){
    			public void mouseDragged(MouseEvent event){
    				if(pointCount<points.length){
    					points[ pointCount ] = new DrawingPoint (event.getPoint(),currentColor, currentValeur); 
    					++pointCount; 
    					repaint(); 
    				} 
    			} 
    		}
    				);
    	}
     
    	public class DrawingPoint {
    		public int x;
    		public int y;
    		public int valeur;
    		public Color color;
    		public DrawingPoint(Point point, Color color, int valeur) {
    			this.color=color;
    			this.x=point.x;
    			this.y=point.y;
    			this.valeur=valeur;
    		}
    	}
     
    	protected void paintComponent(Graphics g)
    	{
    		super.paintComponent(g); 
    		for (int i=0; i<pointCount; i++){
    			g.setColor(points[i].color);
    			g.fillOval(points[i].x-valeur/2, points[i].y-valeur/2, points[i].valeur, points[i].valeur);
    		}
    	} 
     
    	public void setDrawingColor(Color color){
    		currentColor=color;
    	}
     
    	public void setCrayonSize(int valeur){
    		currentValeur=valeur;
    	}
     
    	//effacer le panel
    	public void effacer(){
    		//qu'est-ce que je peux mettre pour effacer le contenu du JPanel ? 
    		this.setForeground(Color.WHITE);
    		this.repaint();
    	}
     
    } // end class PaintPanel
    J'ai commencé avec une méthode effacer() mais elle n'est pas complète. Quelqu'un peut-il m'indiquer le déroulement?

    Merci

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il suffit que tu mettes ton compteur pointcount à 0. En plus, il vaudrait mieux "vider" le tableau, pour ne pas occuper de la mémoire inutilement, en me remplissant de null. Il faut bien entendu appeler repaint() après.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ergonome
    Inscrit en
    Mai 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Mai 2015
    Messages : 34
    Points : 33
    Points
    33
    Par défaut
    Salut, merci pour ton aide.
    ça parrait évident maitenant... pointCount=0; va faire repartir à 0 pointCount, ce qui va effacer tout ce que j'ai dessiné. Les données restent-elles en mémoire quand-même? Est-il nécessaire de remplir le tableau de null ?
    Merci

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par maxa88 Voir le message
    Salut, merci pour ton aide.
    ça parrait évident maitenant... pointCount=0; va faire repartir à 0 pointCount, ce qui va effacer tout ce que j'ai dessiné. Les données restent-elles en mémoire quand-même? Est-il nécessaire de remplir le tableau de null ?
    Merci
    Les références des objets mises dans le tableau y restent tant que tu ne les remplaces pas dans le tableau, donc l'objet correspondant sera considéré comme non éligible au garbage coillecting, occupant de la mémoire pour rien, ne pouvant être libérée au besoin. Bien sûr, dès qu'on va commencer à redessiner, cela avoir pour effet de remplacer les références petit à petit, au fur et à mesure que pointCount s'incrémente, libérant (enfin rendant éligible au GC) les anciennes.

    Pour remplir de null : Arrays.fill(points, null);.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ergonome
    Inscrit en
    Mai 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Mai 2015
    Messages : 34
    Points : 33
    Points
    33
    Par défaut
    D'accord je comprends mieux maintenant. Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/07/2008, 22h32
  2. Réponses: 5
    Dernier message: 17/11/2006, 17h49
  3. Votre avis sur mon parcours et mon CV
    Par mystar dans le forum Emploi
    Réponses: 13
    Dernier message: 25/08/2006, 11h04
  4. Réponses: 4
    Dernier message: 27/02/2006, 16h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo