bonjour
je suis débutante en java et je dois faire un cercle comme étant objet et non plus comme un simple dessin
je sais pas que doit etendre ma classe cercle
class cercle extends .......
s'il vous plait aidez moi .
merci à l'avance
bonjour
je suis débutante en java et je dois faire un cercle comme étant objet et non plus comme un simple dessin
je sais pas que doit etendre ma classe cercle
class cercle extends .......
s'il vous plait aidez moi .
merci à l'avance
Qu'entends tu par un cercle en tant qu'objet et non plus comme un simple dessin ?
- En Java tout est objet (sauf les types de base)
- Pour faire un objet tu n'est pas obligée d'utiliser l'héritage
Bref dis nous en un peu plus sur ce que tu as déja écrit et quel est ton but.
je veux un cercle comme objet càd lorsque je clique sur ce cercle je peux le déplacer ou l'aggrandir ....
j'ai pensé en fait à dessiner ce cercle sur un jpanel.voici une partie de mon code.
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 public class Place extends /*CustomNode*/ JPanel implements MouseListener,ActionListener { public Place(int x,int y,int width,int height ) { this.x=x; this.y=y; this.width=width; this.height =height ; this.setBackground(Color.black); this.setVisible(true); this.setSize(25,25); this.addMouseListener(this); } public void actionPerformed(ActionEvent evt) { } public void paintComponent(Graphics g) { // super.paintComponent(g); //super.paintComponent(g); g.setColor(Color.red); // g.drawOval(0,0,10,10); g.fillOval(0,0,20,20); } public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mouseMoved(MouseEvent e) { } public void mouseDragged(MouseEvent e) { } }
Tu peux faire quelquechose comme ça par exemple:
Je te laisse faire les tests qui vont bien (pas de rayon < 0 , etc...). Au niveau architecture il serait intéressant d'avoir une classe Cercle qui contient les propriétés du cercle (position, rayon et autres) en dehors de toute notion d'affichage puis d'utiliser ta classe Place pour gérer l'affichage.
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 private int rayon = 20; private int circleX = 200; private int circleY = 200; @Override public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.red); g.fillOval(circleX,circleY,rayon,rayon); } public void mouseClicked(MouseEvent e) { switch(e.getButton()) { case MouseEvent.BUTTON1: this.rayon += 5; this.repaint(); break; case MouseEvent.BUTTON2: this.circleX = e.getX(); this.circleY = e.getY(); this.repaint(); break; case MouseEvent.BUTTON3: this.rayon -= 5; this.repaint(); break; } }
peut être vous m'avez pas bien compris, maintenant mon problème est de construire tout d'abord le cercle parce que ce que j'ai fait(dessiner sur le jpanel) ne peut pas résoudre mon problème.
je vous donne un exemple :pour dessiner un rectangle comme objet qui peut entendre les évènements de la souris j'ai fait class Rectangle extends JPanel.
merci beaucoup
salut,
un JPanel sert également de conteneur.
En d'autres termes, un JPanel (ton 'tableau blanc') peut contenir d'autres JPanel (les formes à dessiner).
Autre solution, peut-être plus propre: tu peux faire une classe 'TableauBlanc' dérivant de JPanel qui contiendra une collection (LinkedList par exemple) de l'ensemble des formes (rectangles, cercles, ...). Ce sera ton objet graphique que tu inséreras dans ta fenêtre.
Elle contiendra les méthodes pour ajouter/retirer un objet IForme (cf. ci-dessous), pour les redessiner la totalité du tableau (en itérant sur les formes qu'il contient), pour gérer les clics/drag and drop/... en déléguant éventuellement l'action associée à l'implémentation de ton IForme.
Toutes les formes affichées dériveront d'une interface commune, par exemple IForme proposant des services génériques:
- pour détecter les clics: IForme devra pouvoir dire si telle coordonnée 2D (typiquement les coordonnées de la souris) la concerne ou pas
- pour se dessiner, une fonction prenant en paramètre un object Graphics
- etc...
Je ne suis pas un pro du dessin en java mais il me semble que tu ne peux pas manipuler de JPanel aussi facilement dans une zone de dessin.
L'écouteur d'événement doit certainement être porté par la zone de dessin elle-même. A toi de savoir en fonction de la position et du type de clic ce qu'il advient de faire.
Sinon de manière purement conceptuelle, un objet Cercle peut éventuellement implémenter Shape bien que cela ne soit pas nécessaire et a seulement deux attributs:
- Point centre
- int rayon (ou diamètre)
Un cercle n'a initialement pas vocation à être manipulé par la souris et le clavier.
Partager