Porque que jlabel está com plano de fundo?

3 respostas
Thallysson

Olá, eu criei a seguinte classe:
`

package gui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.EmptyBorder;

import Objects.Ceu;

public class Layers extends JFrame {
public static void main(String[] args) {
	Layers l = new Layers();
	l.setVisible(true);
}

public Layers() {
	setTitle("layer-test");
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    setExtendedState(JFrame.MAXIMIZED_BOTH);
    setUndecorated(true);
    
	JLayeredPane pane = new JLayeredPane();
	pane.setLayout(new BorderLayout());
	
	Toolkit t = Toolkit.getDefaultToolkit();
	Dimension d = t.getScreenSize();
	
	ImageIcon back = new ImageIcon(getClass().getResource("/icons/main_menu_background.gif"));
	ImageIcon back2 = new ImageIcon(getClass().getResource("/icons/main_menu_background2.gif"));
	back.setImage(back.getImage().getScaledInstance(back.getIconWidth()/3,back.getIconHeight()/3,Image.SCALE_DEFAULT));
	back2.setImage(back2.getImage().getScaledInstance(back2.getIconWidth()/3,back2.getIconHeight()/3,Image.SCALE_DEFAULT));
	System.out.println("back: "+back.getIconWidth()+"x"+back.getIconHeight());
	System.out.println("back2: "+back.getIconWidth()+"x"+back.getIconHeight());
	JLabel l2 = new JLabel(back2);
	JLabel l = new JLabel(back);
	Ceu c = new Ceu(true,true,true,false,null,null,d.width,d.height);
	l.setBorder(BorderFactory.createEtchedBorder());
	l2.setBorder(BorderFactory.createEtchedBorder());

	pane.add(c,BorderLayout.CENTER);
	pane.add(l,BorderLayout.EAST);
	pane.add(l2,BorderLayout.WEST);
	l.setBounds(0,0,back.getIconWidth(),back.getIconHeight());		
	setContentPane(pane);
	validate();
}
}

`
Meu objetivo era adicionar nos dois lados da tela dua jlabels e no meio a classe ceu que estende de jpanel só que utilizando jlayeredpane para que as jlabels ficassem sobre o jpanel, funcionou tudo corretamente porém mesmo os ícones das jlabels possuindo plano de fundo transparente elas estão com aquele plano de fundo padrão do java para jpanels. Tem como remover esse plano de fundo para que o jpanel fique somente atrás das imagens e não do plano de fundo delas?

3 Respostas

Chaybelucas

Rapaix… Tenta algo como mudar a cor

seuLabel.setBackground(new Color(0,0,0,0));
Thallysson

Eu já tentei assim, já tentei o setOpaque(false) e já tentei o setBackground(null) e nenhum funcionou

Thallysson

Assim da certo:
`

package gui;

import java.awt.BorderLayout;
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class testnulllayout extends JFrame{
testnulllayout(){
	setTitle("null");
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setLocationRelativeTo(null);
	setLayout(null);
	URL first = null;
	URL second = null;
	try {
		first = new     URL("http://www.clipartsegifs.com.br/cliparts/super_herois/super_homem/super_homem002.gif");
		second = new URL("http://ostentation.com.br/wp-content/uploads/2016/02/greatest-superhero-gif-ever.gif");
	} catch (MalformedURLException e) {
		e.printStackTrace();
	}
	ImageIcon icon2 = new ImageIcon(second);
	ImageIcon icon = new ImageIcon(first);
	JLabel l = new JLabel(icon);
	JLabel l2 = new JLabel(icon2);
	add(l);
	add(l2);
	l2.setBounds(0,0,icon2.getIconWidth(),icon2.getIconHeight());
	l.setBounds(0,0,icon.getIconWidth(),icon.getIconHeight());
	validate();
	setVisible(true);
	setSize(icon.getIconWidth(),icon.getIconHeight());
}
  public static void main(String[]args){
  testnulllayout t = new testnulllayout();
  }
}

`
Mais eu não quero usar setbounds, quero usar um layout, e gostaria de utilizar um jlayeredpane, mais nesse exemplo ai eu coloquei somente uma imagem sobre a outra e no meu projeto eu quero que as imagens que fiquem por cima fiquem nas laterais da janela.

Criado 30 de março de 2016
Ultima resposta 31 de mar. de 2016
Respostas 3
Participantes 2