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.
On peut, en ne spécifiant pas de layout à ton conteneur (en l'occurence ton JPanel): Doing Without a Layout Manager (Absolute Positioning) (ou encore mieux: en faisant son propre layout personnalisé).
Mais dans ce cas, c'est bien évidemment la responsabilité du développeur de faire tous les positionnements, dimensionnements, etc... à la main.
Diable! Et moi qui ai toujours cru qu'il fallait un LayoutManager :o
merci à tous
maintenant je veux relier entre chaque cercle (place) et chaque rectangle par une ligne(ou arc avec flèche).
(notez que je peux dessiner le rectangle ou le cercle où je clique dans la frame à l'aide du mouseClicked du frame).
salut
s'il vous plait répondez moi.
j'ai un probleme avec jcolorchooser .
je n'arrive pas à colorer mon objet(rectangle qui hérite du jpanel)
suite à un click sur une couleur du jcolorchooser puis le boutton ok que j'ai ajouté à la fenetre du
jcolorchooser .voici mon code(sachant que Transition est le nom de mon rectangle que je veux colorer et couleur est le nom du jcolorchooser) :
remarque :je dois entrer Transition t comme argument dans le constructeur car c'est l'objet que je selectionne pour être coloré ,mais lorsque je le fait entrer ,en exécutant le jcolorchooser n'apparait pas comme précédement et en supprimant Transition t du constructeur le jcolorchooser apparait
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
95
96
97 public class Coloration extends javax.swing.JFrame { Transition t; /** Creates new form Coloration */ public Coloration(/*Transition t*/) { //this.t=t; initComponents(); this.setBounds(200,200,450,450); } /* public Coloration() { } */ // <editor-fold defaultstate="collapsed" desc=" Generated Code "> private void initComponents() { Pourcoloration = new javax.swing.JColorChooser(); ok_coloration = new javax.swing.JButton(); quitter_coloration = new javax.swing.JButton(); setTitle("vous pouvez choisir une couleur"); ok_coloration.setLabel("ok"); ok_coloration.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { ok_colorationActionPerformed(evt); } }); quitter_coloration.setLabel("quitter"); quitter_coloration.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { quitter_colorationActionPerformed(evt); } }); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false) .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() .add(78, 78, 78) .add(ok_coloration) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .add(quitter_coloration) .add(10, 10, 10)) .add(layout.createSequentialGroup() .addContainerGap() .add(Pourcoloration, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))) .add(106, 106, 106)) ); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap() .add(Pourcoloration, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(18, 18, 18) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(ok_coloration) .add(quitter_coloration)) .addContainerGap(22, Short.MAX_VALUE)) ); pack(); }// </editor-fold> private void ok_colorationActionPerformed(java.awt.event.ActionEvent evt) { Color couleur; couleur=this.Pourcoloration.getColor(); t.setBackground(couleur); } private void quitter_colorationActionPerformed(java.awt.event.ActionEvent evt) { this.setVisible(false); } /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new Coloration().setVisible(true); } }); } // Variables declaration - do not modify public javax.swing.JColorChooser Pourcoloration; private javax.swing.JButton ok_coloration; private javax.swing.JButton quitter_coloration; // End of variables declaration }
merci .
bonjour j'ai résolu le problème de jcolorchooser et voila le code qui marche tres bien .
package reseaux_de_petrie;
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.*; public class Coloration1 extends javax.swing.JFrame implements ActionListener,MouseListener,ItemListener { public javax.swing.JColorChooser Pourcoloration; private javax.swing.JButton ok_coloration; private javax.swing.JButton quitter_coloration; Transition t; Proprietés p; /** Creates new form Coloration */ public Coloration1(Transition t) { this.t=t; initComponents(); this.setBounds(200,200,450,450); p=new Proprietés(t); } // <editor-fold defaultstate="collapsed" desc=" Generated Code "> private void initComponents() { Pourcoloration = new javax.swing.JColorChooser(); ok_coloration = new javax.swing.JButton(); quitter_coloration = new javax.swing.JButton(); setTitle("vous pouvez choisir une couleur"); ok_coloration.setLabel("ok"); ok_coloration.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { ok_colorationActionPerformed(evt); } }); quitter_coloration.setLabel("quitter"); quitter_coloration.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { quitter_colorationActionPerformed(evt); } }); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false) .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() .add(78, 78, 78) .add(ok_coloration) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .add(quitter_coloration) .add(10, 10, 10)) .add(layout.createSequentialGroup() .addContainerGap() .add(Pourcoloration, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))) .add(106, 106, 106)) ); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap() .add(Pourcoloration, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(18, 18, 18) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(ok_coloration) .add(quitter_coloration)) .addContainerGap(22, Short.MAX_VALUE)) ); pack(); }// </editor-fold> //Pourcoloration est le nom du composante JColorchooser private void ok_colorationActionPerformed(java.awt.event.ActionEvent evt) { Color couleur; couleur=this.Pourcoloration.getColor(); t.setBackground(couleur); /* Color couleur_transition; couleur_transition=t.getBackground(); */ p.pan_coloration.setBackground(couleur);//pan_coloration est le nom du panel ds proprietes } private void quitter_colorationActionPerformed(java.awt.event.ActionEvent evt) { this.setVisible(false); } /** * @param args the command line arguments */ public void actionPerformed(ActionEvent e) { } 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 itemStateChanged(ItemEvent e) { } }
bonjour
je veux relier entre deux dessins(qui peuvent se déplacer suivant le déplacement de la souris) par une flèche mais je ne sais pas comment dessiner la flèche (j'ai deja fait ça mais avec un arc et pas une flèche).
est ce que quelqu'un peut m'aider
merci d'avance
Partager