Auf zwei Panels Parallel Zeichnen

Leroux

Erfahrenes Mitglied
Hi
ich hab vor auf zwei JPanels zu zeichen sprich.

Was ich auf dem MasterPanel male soll auch auf dem SlavePanel gezeichnet werden, das klappt ja auch nur wird das was ich auf dem MasterPanel zeichne dort NICHZT dargestellt nur auf dem Slave Panel.

Mein Source:
Java:
public class NetPrint extends JFrame{
	
	PaintPanel display = new PaintPanel();
	OtherPC bla = new OtherPC();
	public static void main(String[] args) {
		new NetPrint().erstelleGUI();
	}
	
	void erstelleGUI(){
		
		this.addMouseListener(new MouseListener(){

			@Override
			public void mouseClicked(MouseEvent arg0) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void mouseEntered(MouseEvent arg0) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void mouseExited(MouseEvent arg0) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void mousePressed(MouseEvent arg0) {
				display.setXY(arg0.getPoint().x, arg0.getPoint().y);
				
			}

			@Override
			public void mouseReleased(MouseEvent arg0) {
				// TODO Auto-generated method stub
				display.setXY2(arg0.getPoint().x, arg0.getPoint().y);
				bla.setJPanelFront(display);
				display.repaint();
			}
			
		});
		this.setTitle("Leader");
		this.setSize(500,500);
		this.add(display);
		bla.erstelleGUI(display);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
	
	public class PaintPanel extends JPanel{
		
		int x,y,x2,y2;
		public void setXY(int x,int y){
			this.x = x;
			this.y = y;
		}
		public void setXY2(int x2,int y2){
			this.y2 = y2;
			this.x2 = x2;
		}
		
		public void paint(Graphics g) {
			g.drawLine(x-5, y-23, x2-5, y2-23);
		}
	}

SlavePanel:

Java:
public class OtherPC extends JFrame{
	
	JPanel newDisplay = new JPanel();
	
//	public static void main(String[] args) {
//		new OtherPC().erstelleGUI();
//	}
	
	
	public void setJPanelFront(JPanel tmp){
		newDisplay = tmp;
		newDisplay.updateUI();
	}
	
	void erstelleGUI(JPanel bla)
	{
		this.add(bla);
		this.setSize(500,500);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
}

Was hab ich da nicht bedacht ?

Danke
 
Hier ein Bild:

115,bq4uk.jpg


Auf dem Fenster mit dem Title Leader Zeichne ich und was ich dort zeichne Soll auf BEIDEN dargestellt werden zuzeit wird es aber nur auf dem Slave(Ohen Title) dargestellt
 
Ich würde sagen, dass das nicht hinhaut, da der 1. Frame eine referenz auf das Panel hat und umgekehrt.

Wenn du dann bein 2. Frame ein add machst zerfetzt es wahrscheinlich diese referenzen.

Ich würde die ganzen Befehle/Linien in nem Vector speichern und den in den einzelnen Frames speichern.
Daraus kann ich dann meine Informationen ziehen. Vllt. musst du dann noch den Repaint des 2. Frames manuell starten
 
Hallo,

das Problem liegt (wie dfischer schon richtig angemerkt hat) in der Zeile:
Java:
bla.setJPanelFront(display);
Ein Panel kann nicht gleichzeitig in zwei verschiedenen Containern angezeigt werden. Also sobald du das display dem "Slave" frame zuweist, wird er aus dem ersten frame entfernt.

Ich würde dir raten, das ganze auf das Observer-Pattern (Event-Listener-Prinzip) umstellen. Jedes Panel wäre dann als Listener registriert und würde auf die Veränderungen reagieren und sich neuzeichnen.

Grüße
Vincent
 
Zuletzt bearbeitet:
Zurück