Moin,
Ich hab mich hier mal durchs Forum gesucht, aber auf meinen Fall find ich leider keine passende Antwort.
Ich will mehere JPanel übereinander legen. Das Problem ist nur, wenn ich ein Panel zeichnen lassen, dann verschwinden alle, die darunter liegen sollten.
Am besten ist immer ein Codebeispiel :
Diese Klasse soll ein Bild laden :
Diese Klasse zeichnet einen Kreis :
Die letzte Klasse lädt dann beide und malt sie auf ein JFrame
hier ein ausschnitt :
den ganzen Code zu posten wär zu lang, aber das ist genau die Stelle an der es hakt.
es wird einfach immer nur die letzte Komponente gemalt. Ich habs auch schon mit LayeredPane probiert, kriegs aber
nicht hin.
Habt ihr ne Idee?
Kriegts jemand hin, das die JPanel alle zu sehn sind.
Vielen Dank schon mal.
Ich hab mich hier mal durchs Forum gesucht, aber auf meinen Fall find ich leider keine passende Antwort.
Ich will mehere JPanel übereinander legen. Das Problem ist nur, wenn ich ein Panel zeichnen lassen, dann verschwinden alle, die darunter liegen sollten.
Am besten ist immer ein Codebeispiel :
Diese Klasse soll ein Bild laden :
Code:
import java.awt.Graphics;
import javax.swing.JPanel;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import javax.imageio.ImageIO;
class Grafik extends JPanel
{
BufferedInputStream bis;
BufferedImage bild;
int x,y;
public Grafik(String pfad,int x,int y)
{
try
{
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(pfad));
this.bild = ImageIO.read(bis);
}
catch(Exception e){}
finally
{
this.x = x;
this.y = y;
}
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(bild, x, y, this);
}
public int getRGB(int x,int y)
{
return this.bild.getRGB(x,y);
}
}
Diese Klasse zeichnet einen Kreis :
Code:
import java.awt.Graphics;
import java.awt.Color;
import javax.swing.JPanel;
public class KreisAnzeige extends JPanel
{
int xOrdinate,yOrdinate;
int d = 20;
String anzeige;
public ProvinzKreisAnzeige(int xOrdinate,int yOrdinate,int anzeige)
{
this.xOrdinate = xOrdinate;
this.yOrdinate = yOrdinate;
this.anzeige = ""+anzeige;
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.BLUE);
g.fillOval(xOrdinate-(this.d/2),yOrdinate-(this.d/2),this.d,this.d);
g.setColor(Color.WHITE);
g.drawString(this.anzeige,xOrdinate-(this.anzeige.length()*3),yOrdinate+(this.d/2)-6);
}
}
Die letzte Klasse lädt dann beide und malt sie auf ein JFrame
hier ein ausschnitt :
Code:
...
mapPanel = new JPanel(new BorderLayout());
map = new Grafik("map.gif",0,0);
map_color = new Grafik("map_color.gif",0,0);
map.addMouseListener(this);
map.addMouseMotionListener(this);
mapPanel.setComponentZOrder(map,0);
mapPanel.add(map);
ProvinzKreisAnzeige anzeige = new ProvinzKreisAnzeige(30,30,22);
mapPanel.setComponentZOrder(anzeige,1);
mapPanel.add(anzeige);
ProvinzKreisAnzeige anzeige2 = new ProvinzKreisAnzeige(130,130,999);
mapPanel.setComponentZOrder(anzeige2,2);
mapPanel.add(anzeige2);
add(mapPanel, BorderLayout.CENTER);
...
den ganzen Code zu posten wär zu lang, aber das ist genau die Stelle an der es hakt.
es wird einfach immer nur die letzte Komponente gemalt. Ich habs auch schon mit LayeredPane probiert, kriegs aber
nicht hin.
Habt ihr ne Idee?
Kriegts jemand hin, das die JPanel alle zu sehn sind.
Vielen Dank schon mal.