Rysowanie wielu obrazków z wykorzystaniem paintComponent()

0

Cześć,

Chcę za pomoca używania myszy rysować kilka prostokątów. Jednak metody które napisałem pozwalają mi na rysowanie tylko jednego, po czym gdy chcę narysowac nowy poprzedni znika i od nowa mogę rysować. Mój kod

public void paintComponent (Graphics g)
	{
		Graphics g2 = g.create();
      //  g2.drawImage(bi, 0, 0, this);
        
        g2.drawRect(corX, corY, Math.abs( mCorX- corX), Math.abs(mCorY - corY));
 
	}
public void mouseDragged(MouseEvent arg0) {
		mCorX=arg0.getX();
		mCorY=arg0.getY();
		repaint();
	}
public void mousePressed(MouseEvent arg0) {
		

		corX=arg0.getX();
		corY=arg0.getY();
		//repaint();
	}


public void mouseReleased(MouseEvent arg0) {
		
		mCorX=arg0.getX();
		mCorY=arg0.getY();
	//	repaint();
	
	}

1

Musisz stworzyc kolekcję prostokątów, w metodach obsługi zdarzeń myszy dodawac prostokąt do tej kolekcji, a rysować w pętli wszystkie prostokąty.

0

Czyli coś takiego?

	ArrayList<Graphics>lg=new ArrayList<Graphics>();

public void paintComponent (Graphics g)
	{
		Graphics g2 = g.create();
        g2.drawImage(bi, 0, 0, this);
        
        	}

public void mouseReleased(MouseEvent arg0) {
		
		mCorX=arg0.getX();
		mCorY=arg0.getY();
		Graphics g3 = null;
        
        g3.drawRect(corX, corY, Math.abs( mCorX- corX), Math.abs(mCorY - corY));
        
        lg.add(g3);
	//	repaint();
	
	}
0

Nie.

ArrayList<Rectangle> rectangles = new ArrayList<Rectangle>();
...
public void paintComponent (Graphics g)
{
    super.paintComponent(g);
    for(Rectangle r:rectangles)
    { 
         g.drawRect(r.x,r.y,r.width,r.height); 
    }
}

Przy obsłudze myszy mozliwe są różne rozwiązania. Najprościej to chyba tak:

public void mousePressed(MouseEvent evt) 
{
     x = evt.getX();
     y = evt.getY();        
}
public void mouseReleased(MouseEvent evt) 
{
     x2 = evt.getX();
     y2 = evt.getY();
     rectangles.add(new Rectangle(x,y,Math.abs(x-x2),Math.abs(y-y2)));
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1