Deixar Frame Transparente

4 respostas
A

Olá pessoal,

Dando uma olhada no GUJ, percebi que existem vários tópicos ensinando a deixar o Frame transparente, por diversos métodos diferentes…
Até que me deparei com este:

que me chamou bastante atenção pela simplicidade.

Só que este método deixa todos os componetes transparentes também e eu estava procurando algo que ficasse como este:
http://sohminha.orgfree.com/images/JFrameTrasnparente.png

onde os componentes ficam totalmente vísiveis…

Tem como deixá-lo assim?

Eu peguei daqui: http://www.guj.com.br/java/260928-jframe-transparente-e-jpanel-normal
mas não entendi muito bem o código, além de ter dado vários erros aqui.

Alguém pode me ajudar ??

4 Respostas

J

Posta um exemplo com este método, pois não consegui implementá-lo em um projeto.

Grato.

A

Fiz esse exemplo na carreira, só para fins de demonstração.

Ok...então lá vai:
package interfaces;

import com.sun.awt.AWTUtilities;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JRootPane;

public class teste extends JFrame {

    private JButton fechar, mostrar;
    private boolean x;

    public teste() {
        final Container tela = getContentPane();
        tela.setLayout(null);
        this.setResizable(false);
        this.setTitle("Teste");
        this.setBounds(0, 0, 400, 400);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.getContentPane().setLayout(null);
        this.setUndecorated(true);
        this.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
        this.setLocationRelativeTo(null);

        fechar = new JButton();
        fechar.setOpaque(false);
        fechar.setBounds(0, 0, 200, 200);
        fechar.setText("Fechar");
        fechar.setFont(new Font("Arial", Font.BOLD, 12));
        fechar.setBackground(new Color(190, 190, 190));
        this.add(fechar);

        mostrar = new JButton();
        mostrar.setOpaque(false);
        mostrar.setBounds(200, 0, 200, 200);
        mostrar.setText("Ocultar");
        mostrar.setFont(new Font("Arial", Font.BOLD, 12));
        mostrar.setBackground(new Color(190, 190, 190));
        this.add(mostrar);


        mostrar.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                mostrar();
            }
        });
        fechar.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                fechar();
            }
        });

    }

    public void fechar() {
        System.exit(0);
    }

    public void mostrar() {

        if (x == false) {
            AWTUtilities.setWindowOpacity(this, 1f);//Deixa 100% visível
            mostrar.setText("Ocultar");
            x = true;
        } else {
            AWTUtilities.setWindowOpacity(this, 0.5f);   //deixa 50% transparente
            //AWTUtilities.setWindowOpacity(this, 0.01f);// Deixa 99% transparente
            mostrar.setText("Mostrar");
            x = false;
        }
    }
}
Observem que quando aperto ocultar, ele oculta tudo ! Mesmo que eu coloque:
AWTUtilities.setWindowOpacity(this, 0.5f);
Ele aplica o efeito nos botões também.

Quero que ele aplique o efeito só no JFrame
Tenho certeza que é uma coisa bem simples, só que eu não sei...

Talvez use umas duas ou três linhas para fazer isso só no JFrame

E Então?

J

Muito bom o exemplo Avelino7, grato pela postagem e poder ajudar ainda mais os usuários desta comunidade. Até mais.

A

Vlw :smiley: , mas esse funcionalidade eu retirei de um outro código daqui o GUJ, eu só adaptei para um exemplo mais simples.

Você viu o outro jeito? Esse ai só ajusta a transparência e aplica para todos os componentes da Janela…Eu queria um que ocultasse só o Panel, mas que os componentes como os botões, ainda continuassem visíveis…:frowning:

Criado 28 de maio de 2012
Ultima resposta 29 de mai. de 2012
Respostas 4
Participantes 2