Container transparente

2 respostas
H

Procurando eu achei alguma coisa sobre tornar imagens transparentes, mas o quê eu estou querendo fazer é criar um container, no meu caso, a priori, um JPanel, que fosse semi-transparente.
Não estou conseguindo adaptar muito bem os códigos que eu encontrei para usar em um container, chegando a me questionar se isso seria realemente possível.
Se alguém tiver uma luz pra me dar, muito obrigado.

(Sim, isso é um palhaço que não sabe quase nada e quer fazer umas paradas complicadas)

2 Respostas

D

Vc pode setar seu JPanel como não opaco e implementar o método paintComponent, desenhando um retangulo do tamanho do panel, com um fator de alpha baixo

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

public class MeuPanel extends JPanel {

    public MeuPanel() {
        super();
        setOpaque( false );
    }

    public void paintComponent( Graphics g ) {

        super.paintComponent( g );

        // setando a cor para um branco semitransparente
        g.setColor( new Color( 255, 255, 255, 150 );
        
        // desenha um retângulo em toda a extensão do painel
        g.fillRect( 0, 0, getWidth(), getHeight() );

    }

}

Adiciona esse painel num outro container e vc vai ver o resultado.

Falow!

R

No meu caso ocorreu o seguinte:

Tenho JFrame e setei um JPanel Master

this.setContentPane(getPnlMaster());

onde

getPnlMaster();

desenha o meu JPanel principal:

private JPanel getPnlMaster() {
		if (pnlMaster == null) {
			lblImgFundo = new JLabel();
			lblImgFundo.setBounds(new Rectangle(0, 0, 800, 600));
			lblImgFundo.setIcon(getImage("/br/com/meuprojeto/images/minhaimagem.jpg"));
			lblImgFundo.setFocusable(false);
			pnlMaster = new JPanel();
			pnlMaster.setLayout(null);
			pnlMaster.add(getPnlCabecalho(), null);
			pnlMaster.add(getPnlConteudo(), null);
			pnlMaster.add(getPnlRodape(), null);
			pnlMaster.add(lblImgFundo, null);
		}
		return pnlMaster;
	}

como vocês podem ver no código acima, meu JPanel Master tem uma imagem de background e 3 JPanels por cima (cabeçalho, conteúdo e rodapé)…

Eu precisava deixar o JPanel de conteúdo transparente… isso está modelado assim pois na realidade são varios JPannels de conteudo que serão renderizados de acordo com o estado (status) da aplicação… em cada JPanel de conteudo tenho alguns componentes diferentes…

Resumindo, no getPnlConteudo(), precisava renderizar um JPanel transparente.

fiz assim:

private JPanel getPnlConteudo() {
		if (pnlConteudo == null) {
			pnlConteudo = new JPanel();
			pnlConteudo .setLayout(null);
			pnlConteudo .setBounds(new Rectangle(0, 90, 800, 410));
			pnlConteudo .setBackground(new Color(255,255,255,0));
                                                pnlConteudo .setOpaque(false);
			pnlConteudo .setVisible(true);
		}
		return pnlConteudo;
	}

Obs. Coloquei aqui somente um exemplo da ideia q utilizei para ficar facil de entender, na realidade meu código tem diversos componentes que não coloquei aqui para não complicar.

Conclusão,

Para tornar o JPanel transparente foi só fazer:

.setBackground(new Color(255,255,255,0));

Portanto o que controla a intensidade da transparencia é o 4° parametro na criação do objeto Color, no meu caso foi = 0, se o valor fosse = 150 seria semi-transparente

.setBackground(new Color(255,255,255,150));

Edit: ops, importante lembrar que o pnlConteudo .setOpaque(false); tambem é necessario, principalmente se você utilizar Look And Feel na aplicação

Abraços.

Criado 8 de setembro de 2006
Ultima resposta 24 de fev. de 2010
Respostas 2
Participantes 3