Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème Dessin dans JPanel

    11 décembre 2010 à 18:49:22

    Bonjour je suis débutant en java, même si j'ai quelque notion.
    Je me suis lancer dans la création d'un paint assez simpliste.
    Je dois pouvoir créer des objets de forme diverse (Rectangle, Carré,...), avec une couleur et une taille définis par l'utilisateur.

    Actuellement ma fenêtres principale se lance, si dans le menu déroulant l'utilisateur choisit une forme (que le rectangle de fait pour l'instant) une fenêtre(JPanel) s'ouvre ou l'utilisateur peut choisir c'est valeur.
    Mais lorsque l'on ferme (avec OK) rien ne se passe, les données ne sont pas modifié dans Editeur Graphique.

    Lorsque que l'on clique sur définir fond la couleur se met bien en place.

    Une fois que j'ai choisi une forme (seulement Rectangle et carré d'implémenter), et que je clique sur la zone de dessin, je crée un objet de la forme voulu, les données sont bien mise dans les classes en rapport, mais lorsque je test l'ArrayList pour voir son contenue ou pour essayer de l'afficher il n'y a plus rien dedans.

    Merci de toute l'aide que vous pourrez me fournir en espérant que l'on pourra m'aider


    Éditeur Graphique Ma fenêtre Principale


    package tpn_java;
    import java.awt.*;
    import javax.swing.*; 
    import java.awt.event.*;
    import java.util.*;
    
    public class EditeurGraphique extends JFrame {
    
    	protected JMenuBar barreMenu;
    	protected JMenu menu1;
    	protected JMenu menu2;
    	protected JMenuItem ItemsNew;
    	protected JMenuItem ItemsOpen;
    	protected JMenuItem ItemsSave;
    	protected JMenuItem ItemsClose;
    	protected JMenuItem ItemsAbout;	
    	//Liste Boutons :
    	protected JComboBox colorChoice;
    	protected JComboBox shapeChoice;
    	protected JPanel top,bot,mid;
    	protected JButton clear,background;
    	private boolean active = false;
    	private int useColor;
    	private int useShape;
    	private int longueur ;
    	private int largeur ;
    	private ArrayList <Integer> CollectionsFigures;
    	//ID FORME
    	private final static int
    	LINE = 0,
    	RECT = 1,
    	CARRE = 2,
    	OVAL = 3,  
    	CERCLE = 4,
    	FILLED_RECT = 5,
    	FILLED_OVAL = 6,
    	FILLED_CARRE = 7,
    	FILLED_CERCLE = 8,
    	TEXT = 9;
    	//ID COULEUR
    
    	//Creation de la Fenetre Graphique
    	public EditeurGraphique() {
    		setSize(800,600);
    		setTitle("EditeurGraphique");
    		setDefaultCloseOperation(EXIT_ON_CLOSE); 
    		setVisible(true); 
    		setBackground(Color.white);
    		//   EditeurGraphique canvas = new EditeurGraphique();  // The drawing area.
    		// add(canvas,BorderLayout.CENTER);
    
    
    
    		//Creation de la barre de Menu Fichier et ?
    		barreMenu = new JMenuBar();
    		menu1 = new JMenu("Fichier");
    		menu2 = new JMenu ("?");
    		ItemsNew = new JMenuItem("Nouveau");
    		ItemsOpen = new  JMenuItem("Ouvrir");
    		ItemsSave = new JMenuItem("Sauvegarder");
    		ItemsClose = new JMenuItem("Fermer");
    		ItemsAbout = new JMenuItem("?");
    		menu1.add(ItemsNew);
    		menu1.add(ItemsOpen);
    		menu1.add(ItemsSave);
    		menu1.add(ItemsClose);
    		menu2.add(ItemsAbout);
    
    		//Mise en place dans la fenetre   
    		barreMenu = new JMenuBar();
    		setJMenuBar(barreMenu);
    		barreMenu.add(menu1);
    		barreMenu.add(menu2);
    
    		//Creation du menu de Tools
    		top = new JPanel();
    		top.setBackground(Color.white);
    		colorChoice = new JComboBox();
    		shapeChoice = new JComboBox();
    		colorChoice.addItem("Noir");
    		colorChoice.addItem("Rouge");
    		colorChoice.addItem("Vert");
    		colorChoice.addItem("Bleu");
    		colorChoice.addItem("Cyan");
    		colorChoice.addItem("Magenta");
    		colorChoice.addItem("Jaune");
    		colorChoice.addItem("Blanc");
    
    		shapeChoice.addItem("Ligne Droite");
    		shapeChoice.addItem("Rectangle");
    		shapeChoice.addItem("Carre");
    		shapeChoice.addItem("Ovale");
    		shapeChoice.addItem("Cercle");
    		shapeChoice.addItem("Rectangle Plein");
    		shapeChoice.addItem("Carre Plein");
    		shapeChoice.addItem("Ovale Plein");
    		shapeChoice.addItem("Cercle Plein");
    		shapeChoice.addItem("Texte");
    
    		top.setLayout(new FlowLayout());
    		top.add(colorChoice);
    		top.add(shapeChoice);
    		add(top,"North");
    		mid = new JPanel();
    		add(mid);
    
    		bot = new JPanel();
    		clear = new JButton("Effacer");
    		background = new JButton("Couleur de fond");
    		bot.setBackground(Color.white);
    		bot.setLayout(new FlowLayout());
    		bot.add(background);
    		bot.add(clear);
    
    		add(bot,"South");
    
    		//MouseListener
    
    		ItemsClose.addMouseListener(new close());
    		shapeChoice.addMouseListener(new getShapeChoice());
    		colorChoice.addMouseListener(new getColorChoice());
    		background.addMouseListener(new colorBackground());
    		clear.addMouseListener(new clear());
    		mid.addMouseListener(new toto());
    	}
    	class colorBackground extends MouseAdapter{
    
    		public void mouseClicked(MouseEvent e){
    			System.out.println(getUseColor());
    			if(getUseColor() == 0)
    				mid.setBackground(Color.black);
    			else if(getUseColor() == 1)
    				mid.setBackground(Color.red);
    			else if(getUseColor() == 2)
    				mid.setBackground(Color.green);
    			else if(getUseColor() == 3)
    				mid.setBackground(Color.blue);
    			else if(getUseColor() == 4)
    				mid.setBackground(Color.cyan);
    			else if(getUseColor() == 5)
    				mid.setBackground(Color.magenta);
    			else if(getUseColor() == 6)
    				mid.setBackground(Color.yellow);
    			else if(getUseColor() == 7)
    				mid.setBackground(Color.white);
    		}
    	}
    	class close extends MouseAdapter{
    		public void mousePressed(MouseEvent e){
    			System.exit(1);
    		}
    	}
    	class clear extends MouseAdapter{
    		public void mousePressed(MouseEvent e){
    			mid.setBackground(Color.lightGray);
    		}
    	}
    	class getShapeChoice extends MouseAdapter{
    		public void mousePressed(MouseEvent e){
    			int currentShape = shapeChoice.getSelectedIndex();
    
    			if(currentShape == 0){
    				setUseShape(0);
    				openParametersLine();
    			}
    			else if(currentShape == 1){
    				setUseShape(1);
    				openParametersRect();
    			}
    			else if(currentShape == 2){
    				setUseShape(2);
    				openParametersCarre();
    			}
    			/*			else if(currentShape == 3){
    				setUseShape(3);
    				openParametersOval();
    			}
    			else if(currentShape == 4){
    				setUseShape(4);
    				openParametersCercle();
    			}
    			else if(currentShape == 5){
    				setUseShape(5);
    				openParametersFilled_Rect();
    			}
    			else if(currentShape == 6){
    				setUseShape(6);
    				openParametersFilled_Oval();
    			}
    			else if(currentShape == 7){
    				setUseShape(7);
    				openParametersFilled_Carre();
    			}
    			else if(currentShape == 8){
    				setUseShape(8);
    				openParametersCercle();
    			}
    			else if(currentShape == 9){
    				setUseShape(9);
    				openParametersText();
    			}
    			 */
    		}
    		private void openParametersCarre() {
    			setUseShape(2);
    
    		}
    		private void openParametersText() {
    			// TODO Auto-generated method stub
    
    		}
    		private void openParametersOvalPlein() {
    			// TODO Auto-generated method stub
    
    		}
    		private void openParametersRectPlein() {
    			// TODO Auto-generated method stub
    
    		}
    		private void openParametersOval() {
    			// TODO Auto-generated method stub
    
    		}
    		private void openParametersLine() {
    			// TODO Auto-generated method stub
    
    		}
    		public void openParametersRect(){
    			ParametersRectangle rect = new ParametersRectangle();
    			setUseShape(1);
    			rect.setVisible(true);
    		}
    	}        
    
    	class getColorChoice extends MouseAdapter{  
    		public void mousePressed(MouseEvent e){
    			int currentColor = colorChoice.getSelectedIndex();
    			System.out.println("LA couleur choisi est : " +currentColor);
    			if(currentColor == 0) 
    				setUseColor(0);
    			else if (currentColor == 1)
    				setUseColor(1);
    			else if (currentColor == 2)
    				setUseColor(2);
    			else if (currentColor == 3)
    				setUseColor(3);
    			else if (currentColor == 4)
    				setUseColor(4);
    			else if (currentColor == 5)
    				setUseColor(5);
    			else if (currentColor == 6)
    				setUseColor(6);
    			else 
    				setUseColor(7);
    		}
    	}
    
    	public void setUseColor(int useColor) {
    		this.useColor = useColor;
    	}
    	public int getUseColor() {
    		return useColor;
    	}
    	public void setUseShape(int useShape) {
    		this.useShape = useShape;
    	}
    	public int getUseShape() {
    		return useShape;
    	}
    	public void setLongueur(int longueur) {
    		this.longueur = longueur;
    	}
    	public int getLongueur() {
    		return longueur;
    	}
    	public void setLargeur(int largeur) {
    		this.largeur = largeur;
    	}
    	public int getLargeur() {
    		return largeur;
    	}
    
    
    
    	class exitParameters extends MouseAdapter{
    		public void mousePressed(MouseEvent e){
    			dispose();
    		}
    	}
    
    
    
    	ArrayList<Forme> figures = new ArrayList<Forme>(); 
    
    	class toto extends MouseAdapter{ 
    
    		Forme rectangleADeplacer = new Rect(100,100,4, 30, 50);
    		public void mouseClicked(MouseEvent e) {
    
    			if(e.getClickCount() == 1) { // Dessiner le rectangle
    				dessinerForme(e);
    			}				
    			else {
    				if(e.getClickCount() == 2) { // Effacer le rectangle
    					effacerRectangle(e);
    				}
    			}
    		}
    
    		public void mousePressed(MouseEvent e) {
    			rectangleADeplacer = obtenirForme(e.getX(),e.getY());				
    		}
    
    		public void mouseReleased(MouseEvent e) {
    			if(rectangleADeplacer != null) {
    				if(e.getX() != (int)rectangleADeplacer.getX()) {
    					rectangleADeplacer.setLocation(e.getX()-25,e.getY()-25);
    					repaint();
    				}
    			}
    		}
    
    		private void dessinerForme(MouseEvent e) {
    			if( getUseShape() == 1){
    				System.out.println("Dessiner Forme getUseShape == 1");
    				
    				Rect r = new Rect(e.getX()-25, e.getY()-25,getUseColor(),100,50);
    				System.out.println("avant test Zone Vide Valeur de L'arrayList" + figures + "valeur de r " + r);
    				System.out.println("Valeur de largeur" + r.getLargeur());
    				System.out.println("Valeur de Longueur" + r.getLongueur());
    				System.out.println("Valeur de largeur" + r.getCoordX());
    				System.out.println("Valeur de Longueur" + r.getCoordY());
    				if(zoneVidePour(r)) { // Un rectangle n'est pas déjà dessiné dans la zone
    					figures.add(r); 
    					System.out.println("Valeur de L'arrayList" + figures + "valeur de r " + r);
    					System.out.println("Valeur de largeur" + r.getLargeur());
    					System.out.println("Valeur de Longueur" + r.getLongueur());
    					repaint();
    				}				
    				else if(getUseShape() == 2){
    					System.out.println("Dessiner Forme getUseShape == 2");
    					Carre c = new Carre(e.getX()-25, e.getY()-25,getUseColor(),50);
    					if(zoneVidePour(r)) { // Un rectangle n'est pas déjà dessiné dans la zone
    						figures.add(c); 
    						System.out.println("Valeur de L'arrayList" + figures);
    						repaint();
    					}
    					/*else if(forme == "oval"){
    						Oval o = new Oval(e.getX()-25, e.getY()-25,100,50);
    
    					}
    					else if(forme == "Cercle"){
    						Cercle ce = new Cercle(e.getX()-25, e.getY()-25,50);
    					}
    					else if(forme == "Line"){
    						Line l = new Line(e.getX()-25, e.getY()-25,e.getX()+50,e.getY()+50);
    					}
    					else if(forme == "Text"){
    						Text t = new Text(e.getX()-25, e.getY()-25,e.getX()+50,e.getY()+50);
    					}
    					else if(forme == "CarrePlein"){
    						CarrePLein cP = new CarrePlein(e.getX()-25, e.getY()-25,50,50);
    					}	else if(forme == "RectanglePlein"){
    						RectanglePlein rP = new RectanglePlein(e.getX()-25, e.getY()-25,100,50);
    					}	else if(forme == "CerclePlein"){
    						CerclePlein r = new CerclePLein(e.getX()-25, e.getY()-25,50,50);
    					}	else if(forme == "OvalPlein"){
    						OvalPlein r = new OvalPlein(e.getX()-25, e.getY()-25,100,50);
    					}*/
    
    				}
    			}
    		}
    
    		private void effacerRectangle(MouseEvent e) {
    			Forme r = obtenirForme(e.getX(),e.getY());
    			if(r != null) {
    				figures.remove(r);
    				repaint();
    			}
    			else {
    				System.out.println("Pas de rectangle à supprimer dans cette zone");
    			}
    		}
    
    	} 
    
    	private Forme obtenirForme(int x, int y) {
    		for(Forme r : figures) {
    			if(((int)r.getX() == (x-25))&&((int)r.getY() == (y-25)))
    				return r;
    			if((x - (int)r.getX() < 50)&&(y - (int)r.getY() < 50))
    				return r;
    		}
    		return null;
    	}
    
    	private boolean zoneVidePour(Forme f) {
    		System.out.println("Salut la zone vide");
    		boolean estVide = true;
    		int x = (int)f.getX();
    		int y = (int)f.getY();
    		System.out.println("Valeur de L'arrayList" + figures );
    	
    		for(Forme ff:figures) {
    			System.out.println("Valeur de L'arrayList" + figures + "valeur de r " + ff);
    			System.out.println("Valeur de largeur" + ff.getLargeur());
    			System.out.println("Valeur de Longueur" + ff.getLongueur());
    			if((Math.abs((int)ff.getX()-x) <= 50)&&(Math.abs((int)ff.getY()-y) <= 50)) {				
    				estVide = false;
    				break;
    			}
    		}
    		return estVide;
    	}
    	protected void paintComponent(Graphics g) { 
    		System.out.println("JE suis dans paint Components");
    		super.paintComponents(g); 
    		for (Forme r: figures){ 
    			System.out.println(r);
    			g.drawRect((int)r.getCoordX(), (int)r.getCoordY(),(int)r.getLongueur(), (int)r.getLargeur());
    			if(getUseColor() == 0) 
    				g.setColor(Color.black);
    			else if (getUseColor() == 1)
    				g.setColor(Color.red);
    			else if (getUseColor() == 2)
    				g.setColor(Color.green);
    			else if (getUseColor() == 3)
    				g.setColor(Color.blue);
    			else if (getUseColor() == 4)
    				g.setColor(Color.cyan);
    			else if (getUseColor() == 5)
    				g.setColor(Color.magenta);
    			else if (getUseColor() == 6)
    				g.setColor(Color.yellow);
    			else if (getUseColor() == 7)
    				g.setColor(Color.white);
    			else 
    				g.setColor(Color.black);
    		}				
    	} 
    	public static void main(String[] args) {
    		EditeurGraphique e = new EditeurGraphique();
    		e.setVisible(true);
    	}
    
    }
    



    Ma classe Forme



    package tpn_java;
    
    import java.awt.Rectangle;
    
    
    public abstract class Forme extends Rectangle{
    	private int typeForme;
    	private int coordX;
    	private int coordY;
    	private int couleur;
    	
    	public Forme(int type,int coordX,int coordY,int couleur){
    		setTypeForme(type);
    		this.setCoordX(coordX);
    		this.setCoordY(coordY);
    		this.setCouleur(couleur);
    		
    	}
    
    	public void setTypeForme(int typeForme) {
    		this.typeForme = typeForme;
    	}
    
    	public int getTypeForme() {
    		return typeForme;
    	}
    
    	public void setCoordX(int coordX) {
    		this.coordX = coordX;
    	}
    
    	public int getCoordX() {
    		return coordX;
    	}
    
    	public void setCoordY(int coordY) {
    		this.coordY = coordY;
    	}
    
    	public int getCoordY() {
    		return coordY;
    	}
    
    	public void setCouleur(int couleur) {
    		this.couleur = couleur;
    	}
    
    	public int getCouleur() {
    		return couleur;
    	}
    	public abstract int getLongueur();
    	public abstract int getLargeur();
    	public abstract void setLongueur(int l);
    	public abstract void setLargeur(int l);
    	public abstract void setCote(int c);
    	public abstract int getCote();
    }
    


    Ma Classe Rect



    package tpn_java;
    
    
    public class Rect extends Forme{
    	private int longueur;
    	private int largeur ;
    	
    	public Rect(int coordX,int coordY,int couleur, int longueur, int largeur){
    		super(1,coordX,coordY,couleur);
    	
    		this.setLongueur(longueur);
    		this.setLargeur(largeur);
    }
    
    	public void setLongueur(int longueur) {
    		this.longueur = longueur;
    	}
    
    	public int getLongueur() {
    		return longueur;
    	}
    
    	public void setLargeur(int largeur) {
    		this.largeur = largeur;
    	}
    
    	public int getLargeur() {
    		return largeur;
    	}
    
    	@Override
    	public void setCote(int c) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public int getCote() {
    		// TODO Auto-generated method stub
    		return 0;
    	}
    }
    


    Ma Classe Carre



    package tpn_java;
    
    import java.awt.Rectangle;
    
    public class Carre extends Forme{
    	private int cote;
    	
    
    	public Carre(int coordX,int coordY,int couleur, int cote){
    	    super(2,coordX,coordY, couleur);
    	    this.setCote(cote);
    	}
    
    
    	public void setCote(int cote) {
    		this.cote = cote;
    	}
    
    
    	public int getCote() {
    		return cote;
    	}
    
    
    	@Override
    	public int getLongueur() {
    		// TODO Auto-generated method stub
    		return 0;
    	}
    
    
    	@Override
    	public int getLargeur() {
    		// TODO Auto-generated method stub
    		return 0;
    	}
    
    
    	@Override
    	public void setLongueur(int l) {
    		// TODO Auto-generated method stub
    		
    	}
    
    
    	@Override
    	public void setLargeur(int l) {
    		// TODO Auto-generated method stub
    		
    	}
    }
    


    Ma Classe ParametersRectangle


    package tpn_java;
    
    import java.awt.Color;
    import java.awt.GridLayout;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import javax.swing.JButton;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JSpinner;
    import javax.swing.SpinnerNumberModel;
    
    public class ParametersRectangle extends EditeurGraphique {
    	protected JPanel top,bot;
    	protected JSpinner spinX,spinY;
    	protected JLabel topText,topText2;
    	protected JButton ok,exit;
    	private int longueur, largeur;
    	
    	public ParametersRectangle(){
    		
    		setSize(200, 250);
    		setTitle("Dimension du Rectangle");
    		setBackground(Color.white);
    		JPanel tmp = new JPanel();
    		add(tmp,"North");
    		top = new JPanel();
    		topText = new JLabel("Longueur : ");
    		topText2 = new JLabel("Largeur : ");
    		SpinnerNumberModel pourSpinX = new SpinnerNumberModel (1, 1, 100, 1 );
    		SpinnerNumberModel pourSpinY = new SpinnerNumberModel (1, 1, 100, 1 );
    		spinX = new JSpinner(pourSpinX);
    		spinY = new JSpinner(pourSpinY);
    		spinX.setSize(15, 30);
    		spinY.setSize(15,30);
    		top.setLayout(new GridLayout(2,1));
    		top.add(topText);
    		top.add(spinX);
    		top.add(topText2);
    		top.add(spinY);
    		top.setBackground(Color.white);
    		add(top);
    
    		bot = new JPanel();
    		bot.setBackground(Color.white);
    		exit = new JButton("Annuler");
    		ok = new JButton("Valider");
    		bot.add(ok);
    		bot.add(exit);
    		add(bot,"South");			
    
    		System.out.println((Integer)spinX.getValue());
    		ok.addMouseListener(new saveParameters());
    		exit.addMouseListener(new exitParameters());
    	}
    	class saveParameters extends MouseAdapter{
    		public void mousePressed(MouseEvent e){
    			System.out.println("BONJOUR MousePressed PArameters Rectangle");
    				send((Integer)spinX.getValue(),((Integer)spinY.getValue()));
    				dispose();
    	}
    }
    	class exitParameters extends MouseAdapter{
    		public void mousePressed(MouseEvent e){
    				dispose();
    	}
    }
    public void send(int longueur, int largeur){
    	System.out.println("BONJOUR SEND "+super.getName());
    	setLargeur(largeur);
    	setLongueur(longueur);
    	System.out.println("BONJOUR SEND"+longueur + " " + largeur);
    }
    
    
    public int getLargeur() {
    	return largeur;
    }
    public int getLongueur() {
    	return longueur;
    }
    public void setLongueur(int longueur) {
    	this.longueur = longueur;
    }
    public void setLargeur(int largeur) {
    	this.largeur = largeur;
    }
    
    }
    
    • Partager sur Facebook
    • Partager sur Twitter

    Problème Dessin dans JPanel

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown