Rysowanie figur

0

Witam.
Mam problem z rysowaniem. Mam 2 klasy, trójkąt i czworokąt i każdy z tych obiektów chciałbym narysować na tym samym JFrame. Zrobiłem więc klasę dziedziczącą po JFrame, i tam wywołuję funkcję paintComponent. Problem w tym, że na panelu wyświetla się tylko 1 figura.

Klasa z JFrame:

public class Panel extends JPanel{
	
	private Trojkat t;
	private Czworokat cz;
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public void paintComponent(Graphics g){
		 t.rysuj(g);
		 cz.rysuj(g);

	}
	public void doIt(Trojkat tt){
		t = tt;
	}
	public void doIt(Czworokat tt){
		cz = tt;
	}
}

Main:

public class Main {
	public static void main(String [] args){
		
		
		JFrame frame = new JFrame();
		frame.setVisible(true);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(600, 400);
		
		
		
		Punkt a = new Punkt(80,80);
		Punkt b = new Punkt(120,40);
		Punkt c = new Punkt(160, 10);
		Punkt d = new Punkt(100,100);
		
		Trojkat t = new Trojkat(a,b,c);
		Czworokat cz = new Czworokat(a,b,c,d);
        Panel panel = new Panel();
        panel.doIt(cz);
        panel.doIt(t);
        
        frame.add(panel);
}

Proszę o jakieś porady, bo ja już nie mam pomysłu.
Pozdrawiam.

0

A jak wyglądają metody rysuj w trójkącie i czworokącie?

0

Rysowanie trojkata:

public void rysuj(Graphics g){
		
		Trojkat t = new Trojkat(p1, p2, p3);
		
		int tabX [ ] = { t.getP1().getX(), t.getP2().getX(), t.getP3().getX() };
		int tabY [ ] = { t.getP1().getY(), t.getP2().getY(), t.getP3().getY() };
				 
                g.drawPolygon(tabX, tabY, 3);
	}  

Rysowanie czworokata:

public void rysuj(Graphics g){
		
		Czworokat cz = new Czworokat(p1, p2, p3, p4);
		
		int tabX [ ] = { cz.getP1().getX(), cz.getP2().getX(), cz.getP3().getX(), cz.getP4().getX() };
		int tabY [ ] = { cz.getP1().getY(), cz.getP2().getY(), cz.getP3().getY(), cz.getP4().getY() };
		
		
        
		
        g.fillPolygon(tabX, tabY, 4);
	
0

Nie wnikam, po co ponownie tworzysz obiekt czworokąta. Nie wnikam też, czy jak będziesz musiał rysować 70 kąt to stworzysz 70 niemal identycznych klas.

Jeżeli narysujesz trójkąt, a następnie większy od niego czworokąt na tych samych współrzędnych to gdzie chciałbyś zobaczyć ten trójkąt? To tak jak gdybyś wziął kartkę zamalował to co na niej było i dziwił się, że nie widać nic spod spodu.

0

Moim zdaniem, kod jest bez sensu. Wpierw konstruujesz jakiś czworokąt. Metoda rysująca czworokąt konstruuje nowy czworokąt i ten nowy rysuje. (Dla trójkąta jest tak samo).

0

Dzieki za odpowiedz. Fakt faktem, jakims cudem zamiast drawPolygon napisalem fillPolygon i dlatego nie widzialem trojkata.

bogdans masz racje, zmienilem na:

public void rysuj(Graphics g){
 
                
 
                int tabX [ ] = { this.getP1().getX(), this.getP2().getX(), this.getP3().getX(), this.getP4().getX() };
		int tabY [ ] = { this.getP1().getY(), this.getP2().getY(), this.getP3().getY(), this.getP4().getY() };;
 
 
 
 
        g.fillPolygon(tabX, tabY, 4);
}

Dzieki za pomoc.

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