LayoutManager Panels übereinander

  • Themenstarter Themenstarter jacky0612
  • Beginndatum Beginndatum
J

jacky0612

Gast
Hi

ich entwickle gerade ein Brettspiel "Hut auf Hut". Es ist so ähnlich wie Mensch ärger dich nicht.
Ich hab da allerdings noch einige Probleme mit der Programmoberfläche. Man soll das Spielfeld sehen. Es ist ein JLabel.
Und darüber soll man die einzelnen Spielfiguren sehen. Die Spielfiguren sind auch jeweils JLabel's. Diese hab ich mit setBound die richtige Position und Größe zugefügt. Und alle Spielfiguren sind in einem JPanel. Und nun hab ich das SpielfigurenPanel und das Spielfeld in einem Panel hinzugefügt. Dieses Panel hat die Eigenschaft, dass das Layout ein OverlayLayout ist.
Wenn ich nun das Programm starte so sieht man nur das Spielfeld.

Kann mir jemand helfen??
Danke schonmal im vorraus.

hier der code:
Java:
import java.awt.*;
import javax.swing.*;


public class oberflaeche extends JPanel implements Runnable{

	private static final long serialVersionUID = -6756227432794084661L;
	private JFrame f    		= new JFrame("Hut auf Hut");
	private JLabel spielbrett = new JLabel (new ImageIcon( "Spielbrett 6P-1.jpg" ));
	final JPanel p1 = new JPanel();
    final OverlayLayout overlay = new OverlayLayout(p1);
	public JLayeredPane panelFiguren = new JLayeredPane();
	public JLabel g1 = new JLabel(new ImageIcon( "grün.jpg" ));
	public JLabel g2 = new JLabel(new ImageIcon( "schwarz.jpg" ));
	public JLabel g3 = new JLabel(new ImageIcon( "grün.jpg" ));
	public JLabel g4 = new JLabel(new ImageIcon( "grün.jpg" ));
	
	public oberflaeche (int h, int b){
		this.setPreferredSize(new Dimension(h,b));
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		spielbrett.setPreferredSize(new Dimension(512,512));
		p1.setPreferredSize(new Dimension(512,512));
		panelFiguren.setPreferredSize(new Dimension(512, 512));
		
		spielbrett.setSize(512,512);
		panelFiguren.setSize(512,512);
		p1.setSize(512,512);
		g1.setBounds(394, 398, 30, 30);
		g2.setBounds(418, 370, 30, 30);
		g3.setBounds(439, 335, 30, 30);
		g4.setBounds(451, 294, 30, 30);
		
		p1.setLayout(overlay);
		panelFiguren.add(g1);
        panelFiguren.add(g2);
        panelFiguren.add(g3);
        panelFiguren.add(g4);
        p1.add(spielbrett, 0);
        p1.add(panelFiguren, 1);
		
		f.getContentPane().add(p1, BorderLayout.WEST);
		
		f.pack();
		f.setVisible(true);
	}
	
	public static void main (String[] args) { //main-methode
		new oberflaeche(900, 600);
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		
	}
}

PS: die Run-Methode brauche ich später noch und ist für die Oberflaeche unwichtig deshalb ist sie leer.
 
das hilft mir im moment auch nicht weiter ich hab mir das zwar angeschaut, aber immer noch nicht meinen Fehler gefunden.
 
Das OverlayLayout ist wohl in erster Linie für die interne Verwendung innerhalb einer LayerdPane gedacht. Es wäre wohl besser, das nicht direkt selbst zu verwenden, sondern stattdessen dort eine LayeredPane einzusetzen.

Ansonsten, wichtig: Wenn man eine Component zu einer LayeredPane hinzufügt, gibt man ja die Layer an
pane.add(component, layer);

Die übergebene Layer darf aber KEIN 'int' sein, sondern MUSS ein Integer sein. Siehe auch den vorletzten Punkt auf dieser Seite

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


public class oberflaeche2 extends JPanel implements Runnable{

    private static final long serialVersionUID = -6756227432794084661L;
    private JFrame f            = new JFrame("Hut auf Hut");
    private JLabel spielbrett = new JLabel (new ImageIcon( "state3.jpg" ));
    final JLayeredPane p1 = new JLayeredPane();
    public JLayeredPane panelFiguren = new JLayeredPane();
    public JLabel g1 = new JLabel(new ImageIcon( "image01.png" ));
    public JLabel g2 = new JLabel(new ImageIcon( "image02.png" ));
    public JLabel g3 = new JLabel(new ImageIcon( "image03.png" ));
    public JLabel g4 = new JLabel(new ImageIcon( "image04.png" ));

    public oberflaeche2 (int h, int b){
        this.setPreferredSize(new Dimension(h,b));
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        spielbrett.setPreferredSize(new Dimension(512,512));
        p1.setPreferredSize(new Dimension(512,512));
        panelFiguren.setPreferredSize(new Dimension(512, 512));
        panelFiguren.setOpaque(false);
        panelFiguren.setLayout(null);

        spielbrett.setSize(512,512);
        panelFiguren.setSize(512,512);
        p1.setSize(512,512);
        g1.setBounds(394, 398, 30, 30);
        g2.setBounds(418, 370, 30, 30);
        g3.setBounds(439, 335, 30, 30);
        g4.setBounds(451, 294, 30, 30);

        panelFiguren.add(g1, new Integer(0));
        panelFiguren.add(g2, new Integer(1));
        panelFiguren.add(g3, new Integer(2));
        panelFiguren.add(g4, new Integer(3));
        p1.add(spielbrett, new Integer(0));
        p1.add(panelFiguren, new Integer(1));

        f.getContentPane().add(p1, BorderLayout.CENTER);

        f.pack();
        f.setVisible(true);
    }

    public static void main (String[] args) { //main-methode
        new oberflaeche2(900, 600);
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub

    }
}
 

Zurück
Oben