Dúvidas sobre JLayeredPane

Olá, eu li em muitos sites sobre jlayeredpanes, pelo que eu entendi é um objeto onde adicionamos vários jpanels e ele adiciona um sobre o outro(Se eu estiver errado por favor me corrijam!), porém vi bastante sobre o mesmo e vi esse tipo de estrutura https://docs.oracle.com/javase/7/docs/api/javax/swing/doc-files/JLayeredPane-1.gif, porém eu queria adicionar jpanels do mesmo tamanho um sobre o outro como se fossem camadas, e sem que os de cima tapassem os debaixo, então eu tentei assim:
`

package Mainmenu;

import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;

public class layer extends JFrame{
   layer(){
   super("Teste");
   JLayeredPane pane = new JLayeredPane();
   JPanel p = new JPanel();
   JPanel p2 = new JPanel();
  	   p2.setOpaque(true);
   JLabel l = new JLabel("Thallysson");
   JLabel l2 = new JLabel("Kein");
   Font f = new Font("Comic Sans MS",Font.BOLD,50);
   l.setFont(f);
   l2.setFont(f);
   pane.add(p,new Integer(1));
   pane.add(p2,new Integer(2));
   add(pane);
   setVisible(true);
   pack();
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   setLocationRelativeTo(null);
   }
   public static void main(String[]args){
   layer la = new layer();
   }
}

`
Usei jlabels para testar, mais não funcionou, alguém pode me ajudar com essas dúvidas?

Você está criando as labels, mas não está as adicionando a nenhum panel:

JLabel l = new JLabel("Thallysson");
JLabel l2 = new JLabel("Kein");

Ficando assim, por exemplo:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class Layers extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel contentPane;

	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Layers frame = new Layers();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	public Layers() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);

		JLayeredPane pane = new JLayeredPane();
		contentPane.add(pane, BorderLayout.CENTER);
		pane.setLayout(null);

		JLabel l1 = new JLabel("CAMADA 0");
		l1.setForeground(Color.RED);
		l1.setFont(new Font("Comic Sans MS", Font.BOLD, 50));
		pane.setLayer(l1, 0);
		l1.setBounds(82, 65, 315, 132);
		pane.add(l1);

		JLabel l2 = new JLabel("CAMADA 1");
		l2.setFont(new Font("Comic Sans MS", Font.BOLD, 50));
		pane.setLayer(l2, 1);
		l2.setBounds(58, 80, 302, 148);
		pane.add(l2);
	}
}

Se estiver usando o Eclipse, o plugin do WindowBuilder facilita bastante trabalhar com interfaces.

Abcs!

1 curtida

Porque você atribuiu um cardlayout ao JLayeredPane? Antes eu estava tentando fazer com que uma aparecesse em baixo da outra, porém creio que a de cima tampou a de baixo não acha?

Tem razão, comi bola :confused:, corrigi o código.

Abcs!

1 curtida

Ok, muito obrigado, ficou perfeito, e como eu marco a resposta como correta? Não tem botão:

1 curtida