Dúvidas sobre JLayeredPane

4 respostas
Thallysson

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?

4 Respostas

H

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!

Thallysson

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?

H

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

Abcs!

Thallysson

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

Criado 22 de março de 2016
Ultima resposta 22 de mar. de 2016
Respostas 4
Participantes 2