Au secours ! Besoin d'aide JAVA
fab-lc
-
choubaka Messages postés 39442 Date d'inscription Statut Modérateur Dernière intervention -
choubaka Messages postés 39442 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour à tous,
j'ai un petit programme à faire en JAVA et la je sèche. Je tourne en rond, je ne sais plus comment faire.
Mon prog doit dessiner des rectangles vides ou pleins (choix que l'on pourra sélectionner au préalable à partir d'un menu) avec la souris. On clique une fois, cela donne le coin superieur gauche du rectangle, on bouge la souris, on relache et on a le coin inferieur droit du rectangle.
Je suis arrive a faire la classe des menus et j'ai la classe qui dessine les rect vides.
Malheureusement, je n'arrive pas a associer les deux.
Comment dois-je faire ?
Je joins mes lignes de code.
Et mille mercis à ceux qui m'aideront.
class MiniPaint:
mport java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
class FenMenu extends JFrame implements ActionListener, MenuListener {
static String[] libellesFormes = {
"Rectangles vides",
"Rectangles pleins",
"Sélection"
};
private Panneau panneau;
private JMenuBar barreMenus;
private JMenu menuFormes;
private JMenu menuQuitter;
private JCheckBoxMenuItem optionsFormes[];
private JMenuItem optionQuitter;
private int nbFormes;
public void menuSelected (MenuEvent e) {}
public void menuDeselected (MenuEvent e) {}
public void menuCanceled (MenuEvent e) {}
public FenMenu() {
setTitle ("Mini Paint");
setSize (300, 150);
// creation du panneau occupant toute la fenêtre
panneau = new Panneau (this);
getContentPane().add(panneau);
// creation de la barre des menus
barreMenus = new JMenuBar();
setJMenuBar (barreMenus);
// creation menu Formes et ses options
menuFormes = new JMenu ("Formes");
barreMenus.add(menuFormes);
menuFormes.addMenuListener(this);
nbFormes = libellesFormes.length;
optionsFormes = new JCheckBoxMenuItem [nbFormes];
ButtonGroup group = new ButtonGroup();
for (int i=0; i<nbFormes; i++) {
optionsFormes[i] = new JCheckBoxMenuItem (libellesFormes[i]);
menuFormes.add (optionsFormes[i]);
optionsFormes[i].addActionListener(this);
group.add(optionsFormes[i]);
}
// creation menu Quitter
menuQuitter = new JMenu("Quitter");
barreMenus.add(menuQuitter);
optionQuitter = new JMenuItem("Fin de programme");
menuQuitter.add(optionQuitter);
optionQuitter.addActionListener(new ActionQuitter());
// gestion du windowClosing
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
// traitement pour la seconde colonne du menu
class ActionQuitter implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
public void actionPerformed (ActionEvent e) {}
}
class Panneau extends JPanel {
private FenMenu fen;
public Panneau (FenMenu fen) {
this.fen = fen ;
}
}
public class MiniPaint {
public static void main (String args[]) {
FenMenu fen = new FenMenu();
fen.setVisible(true);
}
}
classe RectVide
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.*;
public class RectVide extends JPanel {
private int debX , debY , finX , finY ;
public RectVide () {
// gestion de la souris
monadapteur monadapteur = new monadapteur();
this.addMouseListener (monadapteur);
}
public void paintComponent ( Graphics g ) {
System.out.println(" methode paintComponent ");
g.drawRect(debX , debY ,finX-debX , finY-debY);
}
/*public static void main(String[] args) {
JFrame f = new JFrame("Mini Paint");
RectVide dessin = new RectVide();
f.getContentPane().add(dessin, BorderLayout.CENTER);
f.setSize (900,500);
f.setVisible(true);
// gestion du windowClosing
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.out.println(" fini");
System.exit(0);
}
});
}*/
class monadapteur implements MouseListener {
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {
debX = e.getX() ;
debY = e.getY() ;
System.out.println(" mousePressed debX = "+debX+" debY = "+debY );
}
public void mouseReleased(MouseEvent e) {
finX = e.getX() ;
finY = e.getY() ;
repaint();
System.out.println(" mousePressed finX = "+finX+" finY = "+finY );
}
} // fin de la classe monadapteur
} // fin de la classe publique forme-tp2-swing
j'ai un petit programme à faire en JAVA et la je sèche. Je tourne en rond, je ne sais plus comment faire.
Mon prog doit dessiner des rectangles vides ou pleins (choix que l'on pourra sélectionner au préalable à partir d'un menu) avec la souris. On clique une fois, cela donne le coin superieur gauche du rectangle, on bouge la souris, on relache et on a le coin inferieur droit du rectangle.
Je suis arrive a faire la classe des menus et j'ai la classe qui dessine les rect vides.
Malheureusement, je n'arrive pas a associer les deux.
Comment dois-je faire ?
Je joins mes lignes de code.
Et mille mercis à ceux qui m'aideront.
class MiniPaint:
mport java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
class FenMenu extends JFrame implements ActionListener, MenuListener {
static String[] libellesFormes = {
"Rectangles vides",
"Rectangles pleins",
"Sélection"
};
private Panneau panneau;
private JMenuBar barreMenus;
private JMenu menuFormes;
private JMenu menuQuitter;
private JCheckBoxMenuItem optionsFormes[];
private JMenuItem optionQuitter;
private int nbFormes;
public void menuSelected (MenuEvent e) {}
public void menuDeselected (MenuEvent e) {}
public void menuCanceled (MenuEvent e) {}
public FenMenu() {
setTitle ("Mini Paint");
setSize (300, 150);
// creation du panneau occupant toute la fenêtre
panneau = new Panneau (this);
getContentPane().add(panneau);
// creation de la barre des menus
barreMenus = new JMenuBar();
setJMenuBar (barreMenus);
// creation menu Formes et ses options
menuFormes = new JMenu ("Formes");
barreMenus.add(menuFormes);
menuFormes.addMenuListener(this);
nbFormes = libellesFormes.length;
optionsFormes = new JCheckBoxMenuItem [nbFormes];
ButtonGroup group = new ButtonGroup();
for (int i=0; i<nbFormes; i++) {
optionsFormes[i] = new JCheckBoxMenuItem (libellesFormes[i]);
menuFormes.add (optionsFormes[i]);
optionsFormes[i].addActionListener(this);
group.add(optionsFormes[i]);
}
// creation menu Quitter
menuQuitter = new JMenu("Quitter");
barreMenus.add(menuQuitter);
optionQuitter = new JMenuItem("Fin de programme");
menuQuitter.add(optionQuitter);
optionQuitter.addActionListener(new ActionQuitter());
// gestion du windowClosing
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
// traitement pour la seconde colonne du menu
class ActionQuitter implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
public void actionPerformed (ActionEvent e) {}
}
class Panneau extends JPanel {
private FenMenu fen;
public Panneau (FenMenu fen) {
this.fen = fen ;
}
}
public class MiniPaint {
public static void main (String args[]) {
FenMenu fen = new FenMenu();
fen.setVisible(true);
}
}
classe RectVide
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.*;
public class RectVide extends JPanel {
private int debX , debY , finX , finY ;
public RectVide () {
// gestion de la souris
monadapteur monadapteur = new monadapteur();
this.addMouseListener (monadapteur);
}
public void paintComponent ( Graphics g ) {
System.out.println(" methode paintComponent ");
g.drawRect(debX , debY ,finX-debX , finY-debY);
}
/*public static void main(String[] args) {
JFrame f = new JFrame("Mini Paint");
RectVide dessin = new RectVide();
f.getContentPane().add(dessin, BorderLayout.CENTER);
f.setSize (900,500);
f.setVisible(true);
// gestion du windowClosing
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.out.println(" fini");
System.exit(0);
}
});
}*/
class monadapteur implements MouseListener {
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {
debX = e.getX() ;
debY = e.getY() ;
System.out.println(" mousePressed debX = "+debX+" debY = "+debY );
}
public void mouseReleased(MouseEvent e) {
finX = e.getX() ;
finY = e.getY() ;
repaint();
System.out.println(" mousePressed finX = "+finX+" finY = "+finY );
}
} // fin de la classe monadapteur
} // fin de la classe publique forme-tp2-swing
A voir également:
- Au secours ! Besoin d'aide JAVA
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
13 réponses
Salut
il manque pas mal d'éléments pour t'aider ...
1. c'est quoi cette classe Panneau ???
Chouba,
Pochard d'assaut ..
il manque pas mal d'éléments pour t'aider ...
1. c'est quoi cette classe Panneau ???
Chouba,
Pochard d'assaut ..
Je sais pas trop en fait, j'ai recupere ca sur un livre. Je supposais que c'etait la classe qui donnait le Pannel ou seraient les rectangles.
2. si tu utilises une JFrame, tu dois lui assigner le menu ...
il doit exister une methode du style "setMenuBar" ou quelque chose du genre ....
Ensuite, tu dois gérer les évênements relatif à chaque composant de ton menu... Pour ça tu dois faire appel à des méthodes de la classe responsable de créer tes formes ..
Chouba,
Pochard d'assaut ..
il doit exister une methode du style "setMenuBar" ou quelque chose du genre ....
Ensuite, tu dois gérer les évênements relatif à chaque composant de ton menu... Pour ça tu dois faire appel à des méthodes de la classe responsable de créer tes formes ..
Chouba,
Pochard d'assaut ..
J'ai changé ma class MiniPaint, qu'en pensez-vous ???
import java.awt.*;
import java.awt.event.*;
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.Graphics;
class MiniPaint extends JFrame{
static String[] libellesFormes = {
"Rectangles vides",
"Rectangles pleins",
"Sélection",
};
JCheckBoxMenuItem[] itemFormes;
JMenuItem itemQuitter;
MiniPaint () {
setTitle ("Mini Paint");
setSize (900,500);
// les menus
JMenuBar menubar = new JMenuBar();
getContentPane().add(menubar, BorderLayout.NORTH);
// première colonne du menu
JMenu menuFormes = new JMenu("Formes");
menubar.add(menuFormes);
itemFormes = new JCheckBoxMenuItem [libellesFormes.length];
ButtonGroup groupe = new ButtonGroup ();
for (int i=0; i<libellesFormes.length; i++) {
itemFormes[i] = new JCheckBoxMenuItem (libellesFormes[i]);
menuFormes.add(itemFormes[i]);
groupe.add(itemFormes[i]);
}
// deuxième colonne du menu
JMenu menuQuitter = new JMenu("Quitter");
menubar.add(menuQuitter);
itemQuitter = new JMenuItem("Fin de programme");
menuQuitter.add(itemQuitter);
// ecouteur pour le premier item du premier menu
itemFormes[0].addActionListener(new ActionRectVide());
// ecouteur pour le deuxième item du premier menu
itemFormes[1].addActionListener(new ActionRectPlein());
// ecouteur pour le troisième item du premier menu
itemFormes[2].addActionListener(new ActionSelection());
// ecouteur pour les items du premier menu
/*ActionListener ecouteMenu = new ActionFormes();
for (int i=0; i<libellesFormes.length; i++) {
itemFormes[i].addActionListener(ecouteMenu);
}*/
// ecouteur pour l'item du second menu
itemQuitter.addActionListener(new ActionQuitter());
// gestion du windowClosing
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setVisible(true);
}
public static void main (String[] args) {
MiniPaint application = new MiniPaint();
}
// traitement pour le premier item du premier menu
class ActionRectVide implements ActionListener {
public void actionPerformed (ActionEvent e) {
RectPlein dessin = new RectPlein();
}
}
// traitement pour le deuxième item du premier menu
class ActionRectPlein implements ActionListener {
public void actionPerformed (ActionEvent e) {
RectVide dessin = new RectVide();
}
}
// traitement pour le troisième item du premier menu
class ActionSelection implements ActionListener {
public void actionPerformed (ActionEvent e) {
}
}
// traitement pour la seconde colonne du menu
class ActionQuitter implements ActionListener {
public void actionPerformed (ActionEvent e) {
System.exit(0);
}
}
}
import java.awt.*;
import java.awt.event.*;
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.Graphics;
class MiniPaint extends JFrame{
static String[] libellesFormes = {
"Rectangles vides",
"Rectangles pleins",
"Sélection",
};
JCheckBoxMenuItem[] itemFormes;
JMenuItem itemQuitter;
MiniPaint () {
setTitle ("Mini Paint");
setSize (900,500);
// les menus
JMenuBar menubar = new JMenuBar();
getContentPane().add(menubar, BorderLayout.NORTH);
// première colonne du menu
JMenu menuFormes = new JMenu("Formes");
menubar.add(menuFormes);
itemFormes = new JCheckBoxMenuItem [libellesFormes.length];
ButtonGroup groupe = new ButtonGroup ();
for (int i=0; i<libellesFormes.length; i++) {
itemFormes[i] = new JCheckBoxMenuItem (libellesFormes[i]);
menuFormes.add(itemFormes[i]);
groupe.add(itemFormes[i]);
}
// deuxième colonne du menu
JMenu menuQuitter = new JMenu("Quitter");
menubar.add(menuQuitter);
itemQuitter = new JMenuItem("Fin de programme");
menuQuitter.add(itemQuitter);
// ecouteur pour le premier item du premier menu
itemFormes[0].addActionListener(new ActionRectVide());
// ecouteur pour le deuxième item du premier menu
itemFormes[1].addActionListener(new ActionRectPlein());
// ecouteur pour le troisième item du premier menu
itemFormes[2].addActionListener(new ActionSelection());
// ecouteur pour les items du premier menu
/*ActionListener ecouteMenu = new ActionFormes();
for (int i=0; i<libellesFormes.length; i++) {
itemFormes[i].addActionListener(ecouteMenu);
}*/
// ecouteur pour l'item du second menu
itemQuitter.addActionListener(new ActionQuitter());
// gestion du windowClosing
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setVisible(true);
}
public static void main (String[] args) {
MiniPaint application = new MiniPaint();
}
// traitement pour le premier item du premier menu
class ActionRectVide implements ActionListener {
public void actionPerformed (ActionEvent e) {
RectPlein dessin = new RectPlein();
}
}
// traitement pour le deuxième item du premier menu
class ActionRectPlein implements ActionListener {
public void actionPerformed (ActionEvent e) {
RectVide dessin = new RectVide();
}
}
// traitement pour le troisième item du premier menu
class ActionSelection implements ActionListener {
public void actionPerformed (ActionEvent e) {
}
}
// traitement pour la seconde colonne du menu
class ActionQuitter implements ActionListener {
public void actionPerformed (ActionEvent e) {
System.exit(0);
}
}
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci, je vois bien que cela commence à prendre forme.
Voilà, la dernière version de ma classe. Là, j'arrive à dessiner les rectangles en sélectionnant dans le menu. Seulement, il y a un petit bug, ca ne dessine que des rectangles vides ou pleins selon qu'on est selectionne l'un ou l'autre en premier. De plus, il y a un petit probleme d'affichage, la barre des menus se dédouble quand on sélectionne un choix, d'où peuvent venir tous ces pb, et comment les résoudre, svp.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
class FenMenu extends JFrame implements ActionListener, MenuListener {
private JMenuBar barreMenus;
private JMenu formes, quitter;
private JCheckBoxMenuItem rect_Vide, rect_Plein, selection;
private JMenuItem fin;
public FenMenu() {
setTitle("Mini Paint");
setSize(900,500);
// creation barre des menus
barreMenus = new JMenuBar();
setJMenuBar(barreMenus);
// creation menu Formes et ses options
formes = new JMenu ("Formes");
barreMenus.add(formes);
formes.addMenuListener(this);
ButtonGroup group = new ButtonGroup();
rect_Vide = new JCheckBoxMenuItem ("Rectangle vide");
formes.add(rect_Vide);
rect_Vide.addActionListener(this);
group.add(rect_Vide);
rect_Plein = new JCheckBoxMenuItem ("Rectangle plein");
formes.add(rect_Plein);
rect_Plein.addActionListener(this);
group.add(rect_Plein);
selection = new JCheckBoxMenuItem ("Sélection");
formes.add(selection);
selection.addActionListener(this);
group.add(selection);
// creation menu Quitter
quitter = new JMenu ("Quitter");
barreMenus.add(quitter);
quitter.addMenuListener (this);
fin = new JMenuItem ("Fin de programme");
quitter.add(fin);
fin.addActionListener(this);
// gestion du windowClosing
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public void actionPerformed (ActionEvent e) {
Object source = e.getSource();
if (source == rect_Vide) {
RectVide dessin = new RectVide();
getContentPane().add(dessin);
setVisible(true);
}
if (source == rect_Plein) {
RectPlein dessin = new RectPlein();
getContentPane().add(dessin);
setVisible(true);
}
}
public void menuSelected (MenuEvent e) {}
public void menuDeselected (MenuEvent e) {}
public void menuCanceled (MenuEvent e) {}
}
public class MiniPaint {
public static void main (String args[]) {
FenMenu fen = new FenMenu();
fen.setVisible(true);
}
}
Voilà, la dernière version de ma classe. Là, j'arrive à dessiner les rectangles en sélectionnant dans le menu. Seulement, il y a un petit bug, ca ne dessine que des rectangles vides ou pleins selon qu'on est selectionne l'un ou l'autre en premier. De plus, il y a un petit probleme d'affichage, la barre des menus se dédouble quand on sélectionne un choix, d'où peuvent venir tous ces pb, et comment les résoudre, svp.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
class FenMenu extends JFrame implements ActionListener, MenuListener {
private JMenuBar barreMenus;
private JMenu formes, quitter;
private JCheckBoxMenuItem rect_Vide, rect_Plein, selection;
private JMenuItem fin;
public FenMenu() {
setTitle("Mini Paint");
setSize(900,500);
// creation barre des menus
barreMenus = new JMenuBar();
setJMenuBar(barreMenus);
// creation menu Formes et ses options
formes = new JMenu ("Formes");
barreMenus.add(formes);
formes.addMenuListener(this);
ButtonGroup group = new ButtonGroup();
rect_Vide = new JCheckBoxMenuItem ("Rectangle vide");
formes.add(rect_Vide);
rect_Vide.addActionListener(this);
group.add(rect_Vide);
rect_Plein = new JCheckBoxMenuItem ("Rectangle plein");
formes.add(rect_Plein);
rect_Plein.addActionListener(this);
group.add(rect_Plein);
selection = new JCheckBoxMenuItem ("Sélection");
formes.add(selection);
selection.addActionListener(this);
group.add(selection);
// creation menu Quitter
quitter = new JMenu ("Quitter");
barreMenus.add(quitter);
quitter.addMenuListener (this);
fin = new JMenuItem ("Fin de programme");
quitter.add(fin);
fin.addActionListener(this);
// gestion du windowClosing
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public void actionPerformed (ActionEvent e) {
Object source = e.getSource();
if (source == rect_Vide) {
RectVide dessin = new RectVide();
getContentPane().add(dessin);
setVisible(true);
}
if (source == rect_Plein) {
RectPlein dessin = new RectPlein();
getContentPane().add(dessin);
setVisible(true);
}
}
public void menuSelected (MenuEvent e) {}
public void menuDeselected (MenuEvent e) {}
public void menuCanceled (MenuEvent e) {}
}
public class MiniPaint {
public static void main (String args[]) {
FenMenu fen = new FenMenu();
fen.setVisible(true);
}
}
C'est-à-dire ???
Comment puis-je donc résoudre ce problème de rafraichissement ?
Merci en tout cas déjà pour tout.
Comment puis-je donc résoudre ce problème de rafraichissement ?
Merci en tout cas déjà pour tout.
ouaaaaaaaa. d'ou ta apri? je commence just a aprendr la la programmation! déjà je suis le meiller du collège bétanbe a muret,
ahahah et oui g menti g 11 ans !!!! et j'aimerai bien devenir com vous.
ahahah et oui g menti g 11 ans !!!! et j'aimerai bien devenir com vous.
Beh, moi j'ai juste quelques années de plus que toi (à peu pres 15 de plus), et je me suis mis à apprenndre ce langage de programmation en cours du soir pour obtenir un DEST (bac +4). Donc, si tu attends tout ce temps, tu en as pour un moment.
Moi, perso, je te conseille avant d'attaquer le java, bien évidemment de partir de la base, c'est-à-dire du langage C. Le mieux je pense pour travailler la prog, c'est d'acheter un bon livre avec de bons exo de pratique, d'avoir un max de temps libre pour y travailler et un peu de volonté, mais ça s'est vite vu quand on est motivé...
Moi, perso, je te conseille avant d'attaquer le java, bien évidemment de partir de la base, c'est-à-dire du langage C. Le mieux je pense pour travailler la prog, c'est d'acheter un bon livre avec de bons exo de pratique, d'avoir un max de temps libre pour y travailler et un peu de volonté, mais ça s'est vite vu quand on est motivé...
Bonjour, mon ordi est infecté par le virus java/byte verify et je ne parvien spas à l'éradiquer ave cl'anti-virus AVG free-edition, que faire ?
merci de m'envoyer vos suggections ou solution. CRICRI
merci de m'envoyer vos suggections ou solution. CRICRI
Eh bien voilà une solution, ce n'est peut-être pas la meilleure mais elle vaut ce qu'elle vaut puisque cela fonctionne :
Il y a 4 classes :
1. Classe FigGeo
import java.awt.Graphics;
abstract class FigGeo {
int dX, dY, fX, fY;
int select;
public FigGeo (int xa, int ya, int xb, int yb) {
int numero;
select = 0;
dX = xa;
dY = ya;
fX = xb;
fY = yb;
}
abstract void Dessiner (Graphics g);
}
2. Classe RectVide
import java.awt.Graphics;
import java.awt.Color;
public class RectVide extends FigGeo {
public RectVide (int xa, int ya, int xb, int yb) {
super(xa, ya, xb, yb);
}
public void Dessiner (Graphics g) {
if (select != 0) {
g.setColor(Color.red);
g.drawRect(dX, dY, fX - dX, fY - dY);
g.drawRect(dX+1, dY+1, (fX-dX)-2, (fY - dY)-2);
g.drawRect(dX+2, dY+2, (fX - dX)-4, (fY - dY)-4);
}
else {
g.setColor(Color.black);
g.drawRect(dX, dY, fX - dX, fY - dY);
g.drawRect(dX+1, dY+1, (fX-dX)-2, (fY - dY)-2);
g.drawRect(dX+2, dY+2, (fX - dX)-4, (fY - dY)-4);
}
}
}
3. Classe RectPlein
import java.awt.Graphics;
import java.awt.Color;
public class RectPlein extends FigGeo {
public RectPlein (int xa, int ya, int xb, int yb) {
super(xa, ya, xb, yb);
}
public void Dessiner (Graphics g) {
if (select != 0) {
g.setColor(Color.black);
g.fillRect(dX, dY, fX-dX, fY-dY);
g.setColor(Color.blue);
g.drawRect(dX,dY,fX-dX,fY-dY);
g.drawRect(dX+1, dY+1, (fX-dX)-2, (fY - dY)-2);
g.drawRect(dX+2, dY+2, (fX - dX)-4, (fY - dY)-4);
}
else {
g.setColor(Color.blue);
g.fillRect(dX,dY,fX-dX,fY-dY);
g.setColor(Color.black);
g.drawRect(dX,dY,fX-dX,fY-dY);
g.drawRect(dX+1, dY+1, (fX-dX)-2, (fY-dY)-2);
g.drawRect(dX+2, dY+2, (fX-dX)-4, (fY-dY)-4);
}
}
}
4. Classe MiniPaint
import java.awt.*;
import java.awt.Color;
import java.awt.event.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
import javax.swing.event.*;
public class MiniPaint extends JPanel implements ActionListener, MenuListener {
private JMenuBar barreMenus;
private JMenu formes, fichier, quitter;
private JCheckBoxMenuItem rect_Vide, rect_Plein, selection;
private JMenuItem effacer, quantite, fin;
private boolean rv, rp, s;
private int typeRectangle;
private int clic = 0;
private int qteRec = 0;
private int cste = -1; // constante pour la sélection
private int debX, debY, finX, finY;
private int x1, y1, x2, y2; // coordonnées de la souris cliquée et relachée
public static int qteMax;
FigGeo[] tabDessin = new FigGeo[qteMax]; // tableau de qteMax éléments FigGeo
public MiniPaint() {
JFrame frame = new JFrame ("Mini Paint");
setBackground(Color.white);
// creation barre des menus
barreMenus = new JMenuBar();
frame.setJMenuBar(barreMenus);
// creation menu Formes et ses options
formes = new JMenu ("Formes");
barreMenus.add(formes);
formes.addMenuListener(this);
ButtonGroup group = new ButtonGroup();
rect_Vide = new JCheckBoxMenuItem ("Rectangle vide");
formes.add(rect_Vide);
rect_Vide.addActionListener(this);
group.add(rect_Vide);
rect_Plein = new JCheckBoxMenuItem ("Rectangle plein");
formes.add(rect_Plein);
rect_Plein.addActionListener(this);
group.add(rect_Plein);
selection = new JCheckBoxMenuItem ("Sélection");
formes.add(selection);
selection.addActionListener(this);
group.add(selection);
// creation menu Fichier et ses options
fichier = new JMenu ("Fichier");
barreMenus.add(fichier);
fichier.addMenuListener (this);
effacer = new JMenuItem ("Effacer le document");
fichier.add(effacer);
effacer.addActionListener(this);
// creation menu Quitter
quitter = new JMenu ("Quitter");
barreMenus.add(quitter);
quitter.addMenuListener (this);
fin = new JMenuItem ("Fin de programme");
quitter.add(fin);
fin.addActionListener(this);
// etat initial des options
rv = true;
rp = true;
s = true;
// gestion de la souris
monadapteur monadapteur = new monadapteur();
this.addMouseListener (monadapteur);
// gestion du windowClosing
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.getContentPane().add(this);
frame.setSize (900,500);
frame.setVisible(true);
}
public void menuSelected (MenuEvent e) {
// activation - desactivation des options
rect_Vide.setEnabled(rv);
rect_Plein.setEnabled(rp);
selection.setEnabled(s);
}
public void menuDeselected (MenuEvent e) {}
public void menuCanceled (MenuEvent e) {}
// traitements des menus
public void actionPerformed (ActionEvent e) {
Object source = e.getSource();
// pour la première colonne du menu
if (source == rect_Vide) {
typeRectangle = 1;
rv = false;
rp = true;
s = true;
}
else if (source == rect_Plein) {
typeRectangle = 2;
rv = true;
rp = false;
s = true;
}
else if (source == selection) {
typeRectangle = 3;
rv = true;
rp = true;
s = false;
}
// pour la deuxième colonne du menu
else if (source == effacer) {
if (JOptionPane.showConfirmDialog(null,
"Voulez-vous vraiment effacer le dessin ?",
"Confirmation de l'effacement du dessin",
JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
for (int i=0; i<qteMax; i++) {
if (tabDessin[i] != null) {
tabDessin[i] = null;
qteRec = 0;
}
}
cste = -1;
typeRectangle = 0;
rv = true;
rp = true;
s = true;
}
repaint();
}
// pour la troisième colonne du menu
else if (source == fin) {
if (JOptionPane.showConfirmDialog(null,
"Voulez-vous vraiment quitter Mini Paint ?",
"Fermeture de Mini Paint", JOptionPane.YES_NO_OPTION)
== JOptionPane.YES_OPTION) {
System.exit(0);
}
}
}
public void paintComponent (Graphics g) {
super.paintComponent(g);
for (int i=0; i<qteMax; i++) {
if (tabDessin[i] != null) {
if (i==cste) {
tabDessin[i].select = 2;
}
else {
tabDessin[i].select = 0;
}
tabDessin[i].Dessiner(g);
}
}
if (cste != -1){
tabDessin[cste].Dessiner(g);
}
}
// classe monadapteur (gestion de la souris)
class monadapteur implements MouseListener {
public void mouseClicked(MouseEvent e) {
debX = e.getX() ;
debY = e.getY() ;
if (typeRectangle == 3) {
if ((e.getModifiers() & InputEvent.BUTTON1_MASK)
== InputEvent.BUTTON1_MASK) {
for (int i=0; i<qteMax; i++) {
if (tabDessin[i] != null) {
if (tabDessin[i].dX <= debX && debX <= tabDessin[i].fX
&& tabDessin[i].dY <= debY && debY <= tabDessin[i].fY) {
cste = i;
}
}
}
repaint();
}
}
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {
x1 = e.getX() ;
y1 = e.getY() ;
if ((e.getModifiers() & InputEvent.BUTTON1_MASK)
== InputEvent.BUTTON1_MASK && typeRectangle != 3) {
clic = 1;
}
}
public void mouseReleased(MouseEvent e) {
if (clic == 1) {
x2 = e.getX() ;
y2 = e.getY();
if (x1 <= x2 && y1 <= y2) {
debX=x1; debY=y1; finX=x2; finY=y2;
}
if (x2 <= x1 && y2 < y1) {
debX=x2; debY=y2; finX=x1; finY=y1;
}
if (x1 < x2 && y2 <= y1) {
debX=x1; debY=y2; finX=x2; finY=y1;
}
if (x2 < x1 && y1 < y2) {
debX=x2; debY=y1; finX=x1; finY=y2;
}
if (debX < finX && finY > debY && qteRec < qteMax) {
if (typeRectangle == 1) {
tabDessin[qteRec] = new RectVide(debX, debY, finX, finY);
}
else if (typeRectangle == 2) {
tabDessin[qteRec] = new RectPlein(debX, debY, finX, finY);
}
qteRec++;
repaint();
clic = 0;
}
}
}
}
public static void main(String[] args)
{
String rep = JOptionPane.showInputDialog(null,
"Indiquez le nombre de figures géométriques voulues pour Mini Paint");
qteMax = Integer.parseInt(rep);
MiniPaint minipaint = new MiniPaint();
}
}
Il y a 4 classes :
1. Classe FigGeo
import java.awt.Graphics;
abstract class FigGeo {
int dX, dY, fX, fY;
int select;
public FigGeo (int xa, int ya, int xb, int yb) {
int numero;
select = 0;
dX = xa;
dY = ya;
fX = xb;
fY = yb;
}
abstract void Dessiner (Graphics g);
}
2. Classe RectVide
import java.awt.Graphics;
import java.awt.Color;
public class RectVide extends FigGeo {
public RectVide (int xa, int ya, int xb, int yb) {
super(xa, ya, xb, yb);
}
public void Dessiner (Graphics g) {
if (select != 0) {
g.setColor(Color.red);
g.drawRect(dX, dY, fX - dX, fY - dY);
g.drawRect(dX+1, dY+1, (fX-dX)-2, (fY - dY)-2);
g.drawRect(dX+2, dY+2, (fX - dX)-4, (fY - dY)-4);
}
else {
g.setColor(Color.black);
g.drawRect(dX, dY, fX - dX, fY - dY);
g.drawRect(dX+1, dY+1, (fX-dX)-2, (fY - dY)-2);
g.drawRect(dX+2, dY+2, (fX - dX)-4, (fY - dY)-4);
}
}
}
3. Classe RectPlein
import java.awt.Graphics;
import java.awt.Color;
public class RectPlein extends FigGeo {
public RectPlein (int xa, int ya, int xb, int yb) {
super(xa, ya, xb, yb);
}
public void Dessiner (Graphics g) {
if (select != 0) {
g.setColor(Color.black);
g.fillRect(dX, dY, fX-dX, fY-dY);
g.setColor(Color.blue);
g.drawRect(dX,dY,fX-dX,fY-dY);
g.drawRect(dX+1, dY+1, (fX-dX)-2, (fY - dY)-2);
g.drawRect(dX+2, dY+2, (fX - dX)-4, (fY - dY)-4);
}
else {
g.setColor(Color.blue);
g.fillRect(dX,dY,fX-dX,fY-dY);
g.setColor(Color.black);
g.drawRect(dX,dY,fX-dX,fY-dY);
g.drawRect(dX+1, dY+1, (fX-dX)-2, (fY-dY)-2);
g.drawRect(dX+2, dY+2, (fX-dX)-4, (fY-dY)-4);
}
}
}
4. Classe MiniPaint
import java.awt.*;
import java.awt.Color;
import java.awt.event.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
import javax.swing.event.*;
public class MiniPaint extends JPanel implements ActionListener, MenuListener {
private JMenuBar barreMenus;
private JMenu formes, fichier, quitter;
private JCheckBoxMenuItem rect_Vide, rect_Plein, selection;
private JMenuItem effacer, quantite, fin;
private boolean rv, rp, s;
private int typeRectangle;
private int clic = 0;
private int qteRec = 0;
private int cste = -1; // constante pour la sélection
private int debX, debY, finX, finY;
private int x1, y1, x2, y2; // coordonnées de la souris cliquée et relachée
public static int qteMax;
FigGeo[] tabDessin = new FigGeo[qteMax]; // tableau de qteMax éléments FigGeo
public MiniPaint() {
JFrame frame = new JFrame ("Mini Paint");
setBackground(Color.white);
// creation barre des menus
barreMenus = new JMenuBar();
frame.setJMenuBar(barreMenus);
// creation menu Formes et ses options
formes = new JMenu ("Formes");
barreMenus.add(formes);
formes.addMenuListener(this);
ButtonGroup group = new ButtonGroup();
rect_Vide = new JCheckBoxMenuItem ("Rectangle vide");
formes.add(rect_Vide);
rect_Vide.addActionListener(this);
group.add(rect_Vide);
rect_Plein = new JCheckBoxMenuItem ("Rectangle plein");
formes.add(rect_Plein);
rect_Plein.addActionListener(this);
group.add(rect_Plein);
selection = new JCheckBoxMenuItem ("Sélection");
formes.add(selection);
selection.addActionListener(this);
group.add(selection);
// creation menu Fichier et ses options
fichier = new JMenu ("Fichier");
barreMenus.add(fichier);
fichier.addMenuListener (this);
effacer = new JMenuItem ("Effacer le document");
fichier.add(effacer);
effacer.addActionListener(this);
// creation menu Quitter
quitter = new JMenu ("Quitter");
barreMenus.add(quitter);
quitter.addMenuListener (this);
fin = new JMenuItem ("Fin de programme");
quitter.add(fin);
fin.addActionListener(this);
// etat initial des options
rv = true;
rp = true;
s = true;
// gestion de la souris
monadapteur monadapteur = new monadapteur();
this.addMouseListener (monadapteur);
// gestion du windowClosing
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.getContentPane().add(this);
frame.setSize (900,500);
frame.setVisible(true);
}
public void menuSelected (MenuEvent e) {
// activation - desactivation des options
rect_Vide.setEnabled(rv);
rect_Plein.setEnabled(rp);
selection.setEnabled(s);
}
public void menuDeselected (MenuEvent e) {}
public void menuCanceled (MenuEvent e) {}
// traitements des menus
public void actionPerformed (ActionEvent e) {
Object source = e.getSource();
// pour la première colonne du menu
if (source == rect_Vide) {
typeRectangle = 1;
rv = false;
rp = true;
s = true;
}
else if (source == rect_Plein) {
typeRectangle = 2;
rv = true;
rp = false;
s = true;
}
else if (source == selection) {
typeRectangle = 3;
rv = true;
rp = true;
s = false;
}
// pour la deuxième colonne du menu
else if (source == effacer) {
if (JOptionPane.showConfirmDialog(null,
"Voulez-vous vraiment effacer le dessin ?",
"Confirmation de l'effacement du dessin",
JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
for (int i=0; i<qteMax; i++) {
if (tabDessin[i] != null) {
tabDessin[i] = null;
qteRec = 0;
}
}
cste = -1;
typeRectangle = 0;
rv = true;
rp = true;
s = true;
}
repaint();
}
// pour la troisième colonne du menu
else if (source == fin) {
if (JOptionPane.showConfirmDialog(null,
"Voulez-vous vraiment quitter Mini Paint ?",
"Fermeture de Mini Paint", JOptionPane.YES_NO_OPTION)
== JOptionPane.YES_OPTION) {
System.exit(0);
}
}
}
public void paintComponent (Graphics g) {
super.paintComponent(g);
for (int i=0; i<qteMax; i++) {
if (tabDessin[i] != null) {
if (i==cste) {
tabDessin[i].select = 2;
}
else {
tabDessin[i].select = 0;
}
tabDessin[i].Dessiner(g);
}
}
if (cste != -1){
tabDessin[cste].Dessiner(g);
}
}
// classe monadapteur (gestion de la souris)
class monadapteur implements MouseListener {
public void mouseClicked(MouseEvent e) {
debX = e.getX() ;
debY = e.getY() ;
if (typeRectangle == 3) {
if ((e.getModifiers() & InputEvent.BUTTON1_MASK)
== InputEvent.BUTTON1_MASK) {
for (int i=0; i<qteMax; i++) {
if (tabDessin[i] != null) {
if (tabDessin[i].dX <= debX && debX <= tabDessin[i].fX
&& tabDessin[i].dY <= debY && debY <= tabDessin[i].fY) {
cste = i;
}
}
}
repaint();
}
}
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {
x1 = e.getX() ;
y1 = e.getY() ;
if ((e.getModifiers() & InputEvent.BUTTON1_MASK)
== InputEvent.BUTTON1_MASK && typeRectangle != 3) {
clic = 1;
}
}
public void mouseReleased(MouseEvent e) {
if (clic == 1) {
x2 = e.getX() ;
y2 = e.getY();
if (x1 <= x2 && y1 <= y2) {
debX=x1; debY=y1; finX=x2; finY=y2;
}
if (x2 <= x1 && y2 < y1) {
debX=x2; debY=y2; finX=x1; finY=y1;
}
if (x1 < x2 && y2 <= y1) {
debX=x1; debY=y2; finX=x2; finY=y1;
}
if (x2 < x1 && y1 < y2) {
debX=x2; debY=y1; finX=x1; finY=y2;
}
if (debX < finX && finY > debY && qteRec < qteMax) {
if (typeRectangle == 1) {
tabDessin[qteRec] = new RectVide(debX, debY, finX, finY);
}
else if (typeRectangle == 2) {
tabDessin[qteRec] = new RectPlein(debX, debY, finX, finY);
}
qteRec++;
repaint();
clic = 0;
}
}
}
}
public static void main(String[] args)
{
String rep = JOptionPane.showInputDialog(null,
"Indiquez le nombre de figures géométriques voulues pour Mini Paint");
qteMax = Integer.parseInt(rep);
MiniPaint minipaint = new MiniPaint();
}
}