Auf LayeredPane zeichnen

Hallo,
ich würde gerne auf ein LayeredPane was (z.b. Graphen) zeichnen.

Habe dazu in einer Klasse ein LayeredPane angelegt und jetzt möchte ich von einer anderen Klasse darauf zeichnen, bin da jetzt wie folgt vorgegangen:

import java.awt.*;
import javax.swing.*;

class Zeichner{

public void paint(Graphics g){
		AndereKlasse.layeredPane1.drawRect(0,0,100,100);
	}}

Funktioniert so natürlich nicht! Kann mir bitte jemand sagen wie ich es richtig mache??

öh ich weiß nicht genau aber dein Code kann einem nicht soviel sagen
aber das sollte eigentlich gehn

class LayerClass extends JLayerPane{
public void paint(Graphics g){
        g.drawRect(0,0,100,100);
    }
   public static void main(String[] args){
     JFrame f = new JFrame();
     f.setLayerPane(new LayerClass());
     f.setVisible(true);
  }
}

ich habs nicht getestet aber es könnte klappen

Ja so sollte es schon funktionieren, aber mein Problem ist anders:

public class Fenster extends JFrame{
...
...
JLayeredPane anmalen = new JLayeredPane();
...
}

class Zeichnen{
//zeichne was auf Fenster.anmalen;
}

Von einer main-Class wird dann Fenster und Zeichnen aufgerufen, sprich die Klasse Zeichnen soll dann was in die Klasse Fenster zeichnen!

achso naja du musst das so überschreiben wie ich es da oben gemacht hab und dann musst du dieses Graphics Objekt and die Klasse übergeben dann kann sie darauf malen

Ok, also ich stehe noch so halb auf der Leitung. Ich überschreib praktisch:

import java.awt.*;
import javax.swing.*;

class Zeichner{
	
	public void paint(Graphics g){
		g.drawRect(0,0,100,100);
	}
}

Nur wie übergebe ich jetzt das ganze an die Klasse Fenster mit dem JLayeredPane anmalen?

Also noch kurz allgemein, damit man mein Problem/Vorhaben evtl. besser nachvollziehen kann:

  1. Ich habe eine Klasse: public class Fenster extends JFrame
  2. In der Klasse Fenster ist eine Menge Zeugs drin (Textfelder, Labels,… und eben das JLayeredPane anmalen)
  3. Auf das JLayeredPane anmalen möchte ich was drauf zeichnen, aber von einer anderen Klasse heraus, der Klasse Zeichnen

So, jetzt habe ich es doch noch hinbekommen:

import java.awt.*;
import javax.swing.*;

class Zeichner extends JLayeredPane{
	public Zeichner(){
		setSize(350,200);
		setVisible(true);
	}
	public void paint(Graphics g){
	    g.setColor(new Color(192,192,192));
		g.drawLine(2,10,348,10);
		g.drawLine(2,20,348,20);
	}
	public static void main(String[] args){
		new Zeichner();
	}
}

Und dann in der Fenster Klasse nur noch folgendes hinzugefügt:

public class Fenster extends JFrame{
Zeichner maler;
...
...
maler = new Zeichner();
JLayeredPane anmalen = new JLayeredPane();
anmalen.add(maler);
....
...

ich kenn mich nicht mit layeredpane aus, aber das schaut programmtechnisch nicht koscher aus.

Deine Klasse Zeichner erbt von LayeredPane und du fuegst diese dann einer LayeredPane zu ? das ist unlogisch… warum die 2. LayeredPane klasse.

Kannst du nicht in der Frame Klasse deine Klasse Zeichner einfach als LayeredPane setzen ?

http://java.sun.com/docs/books/tutorial/uiswing/components/layeredpane.html

du musst nicht add aufrufen sonder setLayerPane so wie in meinem Beispiel oben, weil so ist es nur eine normale Komponente die du auf dein Fenster packst

Also das funktioniert leider nicht:

anmalen.setLayeredPane(malen);

Bringt es irgendwelche Nachteile wenn ich meinen alten Weg gehe, also eine normale Komponente auf das Fenster packe?

nö nur da musste keine LayerPane für nehmen, da kannst du auch nen JPanel nehmen

Ok, das passt, JPanel wäre meine zweite Wahl gewesen! :wink:

Jetzt hätte ich noch eine Frage, wie würdet ihr einen Graphen Zeichnen? Z. B. wenn der Graph eine Sinuskurve sein soll, müßten ja die die Hoch- und Tiefpunkte keine Spitzen sein, sondern eben Kurven und drawLine dürfte den optischen Effekt so nicht bringen?

hmm schwere Frage
aber ich denke das einfachste wäre du nimmst drawPolyline und berechnest halt viele Punkte
oder du baust dir eine Klasse die sowas für dich macht was denke ich aber etwas schwerer ist

Danke, damit dürfte es klappen!

setLayeredPane soll auch auf den Frame aufgerufen werden, wie Eagle oben geschrieben hat.

Dein Weg ist doppelt gemobbelt und daher nicht ratsam

Gehe ich in ein Unterforum und lese die Threads mit neuen Nachrichten, gehe raus, aktualisiere - ist das Forum immernoch als ungelesen markiert.

Ich hab mal was umgestellt da müssen wir mal beobachten wie sich das auswirkt.
Die alte Einstellung war etwas Server schonend (laut Kommentar zu der Einstellung)