So habe das Programm erstmal ein bisschen überarbeitet.
Nochmals danke für deine Hilfe bisher.
Hier ist der aktuelle Code
[Java]
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class VierGewinntGUI
{
private static final long serialVersionUID = 1L;
private JPanel funktionsEbene, grafikEbene, benutzerEbene;
private ZeichneObjekt spielJeton;
public VierGewinntGUI()
{
initGUI();
}
private void initGUI()
{
// die Ebenen werden erzeugt und später in vorliegender Reihenfolge im JFrame auf einander liegen
funktionsEbene = new ErzeugeEbene(600, 600, false);
grafikEbene = new ErzeugeEbene(600, 600, false);
benutzerEbene = new ErzeugeEbene(600, 600, false);
JButton klick = new JButton("Button versetzen");
klick.setBounds(0, 0, 100, 100);
klick.addActionListener(new klickBeobachter());
benutzerEbene.add(klick);
ZeichneObjekt hinterGrund = new ZeichneObjekt("images/hinterGrund.png");
hinterGrund.setBounds(0, 0, 600, 600);
grafikEbene.add(hinterGrund);
spielJeton = new ZeichneObjekt("images/spielJeton.jpg");
spielJeton.setBounds(200, 200, 108, 107);
benutzerEbene.add(spielJeton);
JetonDragDrop jetonBewegung = new JetonDragDrop();
spielJeton.addMouseListener(jetonBewegung);
spielJeton.addMouseMotionListener(jetonBewegung);
}
//ActionListener um den Spieljeton von der obersten auf die unterste Ebene zu versetzen
public class klickBeobachter implements ActionListener
{
public void actionPerformed (ActionEvent e)
{
if(spielJeton.getX()==250 && spielJeton.getY()==175)
{
funktionsEbene.add(spielJeton);
benutzerEbene.remove(spielJeton);
spielJeton.setBounds(250, 175, 108, 107);
}else{System.out.println("Nicht Verschoben");}
}
}
public JPanel gibFunktionsEbene()
{
return funktionsEbene;
}
public JPanel gibGrafikEbene()
{
return grafikEbene;
}
public JPanel gibBenutzerEbene()
{
return benutzerEbene;
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
VierGewinntGUI neueGUI = new VierGewinntGUI();
//Hauptfenster
JFrame hauptFenster = new JFrame("Vier Gewinnt - Gewinnst auch du?");
hauptFenster.setSize(600, 600);
hauptFenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
hauptFenster.setLocation(300, 70);
hauptFenster.setLayout(null);
hauptFenster.setResizable(false);
hauptFenster.add(neueGUI.gibBenutzerEbene());
hauptFenster.add(neueGUI.gibGrafikEbene());
hauptFenster.add(neueGUI.gibFunktionsEbene());
hauptFenster.setVisible(true);
}
});
}
}
[/Java]
[Java]
import javax.swing.JPanel;
public class ErzeugeEbene extends JPanel
{
private static final long serialVersionUID = 1L;
public ErzeugeEbene(int breite, int höhe, boolean transparenz)
{
setSize(breite, höhe);
setLayout(null);
setOpaque(transparenz);
}
}
[/Java]
[Java]
import java.awt.*;
import javax.swing.JPanel;
public class ZeichneObjekt extends JPanel
{
private static final long serialVersionUID = 1L;
private Image bild;
public ZeichneObjekt(String dateiPfad)
{
bild = getToolkit().getImage(dateiPfad);
}
public void paintComponent(Graphics g)
{
g.drawImage(bild, 0, 0, this);
}
}
[/Java]
[Java]
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JComponent;
public class JetonDragDrop extends MouseAdapter implements MouseMotionListener
{
private int startx;
private int starty;
private JComponent c = null;
public void mouseEntered(MouseEvent e)
{
c = (JComponent) e.getSource();
}
public void mousePressed(MouseEvent e)
{
startx = e.getX();
starty = e.getY();
}
public void mouseReleased(MouseEvent e)
{
if(e.getXOnScreen()>=560 && e.getXOnScreen()<= 740 && e.getYOnScreen()>=325 && e.getYOnScreen()<=445)
{
c.setLocation(250, 175);
}
}
public void mouseDragged(MouseEvent e)
{
setPosition(e);
}
private void setPosition(MouseEvent e)
{
int neux = c.getLocation().x + e.getX() - startx;
int neuy = c.getLocation().y + e.getY() - starty;
c.setLocation(neux, neuy);
}
public void mouseMoved(MouseEvent e)
{
}
}
[/Java]
Dein Tip mit dem JPanel anstatt Cavanas oder wie das heißt war genau richtig.
Es ist mir jetzt gelungen die Bilder auf die Ebenen zu zeichnen.
Mein einziges Problem ist jetzt nur noch das der gezeichnete "Hintergrund" auf der mittleren Ebene alle anderen überdeckt.
Habe dir für das bessere Verständnis mal ein Screenshot angehangen.
Der zu sehende Jeton soll über dem schwarzen Bild liegen.
Verstehst du was ich meine?