Transparencia em JFrame

Aqui esta uma classe bem legal pra se utilizar, esta classe controla a transparencia de um JFrame.

Veja:

public class FrameTransparente extend JFrame{

    private JLabel label;

    public FrameTransparente() {
        init();
        AWTUtilities.setWindowOpacity(this, 0.7F);
    }

    public void init() {
        label = new JLabel("Teste de Transparencia");
        setSize(200, 250);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        add(label);
        setLayout(new GridBagLayout());
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        FrameTransparente f = new FrameTransparente();
        f.setVisible(true);
    }

}

O controle da transparencia do codigo ocorre nesta linha:

        AWTUtilities.setWindowOpacity(this, 0.7F);

Aonde você passa o frame que deseja utilizar a transparencia (this) e o valor dela. de 0 à 1.

Pronto bem simples e facio. podemos passar o frame como parametro para essa classe criando um controlador etc etc etc….

Segue uma scream de ex:

nesta imagem fiz um teste com valor 0.8.

Obrigado.

Guilherme B. Zarelli

Imagem de fundo em JPanel

Segue dois exemplos abaixo para inserir uma imagem de backgroud em um JPanel

Neste primeiro exemplo faz a imagem (“fundoPrincipal”) ser automaticamente redimencionada quando voce altera o tamanho da janela. Podendo tambem inserir uma imagem maior do que o tamanho do painel.

    /** Método que define a imagem de fundo da tela principal
     *  Com redimencionamento
     * @param g
     * @see JComponent#paintComponent(java.awt.Graphics)
     */
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g.create();
        g2d.drawImage(fundoPrincipal, 0, 0, this.getWidth(), this.getHeight(), null);
        g2d.dispose();
    }

Já neste exemplo a imagem (“fundoLogin”) fica do tamanho original e centralizada no painel sem alteração caso a janela mude de tamanho.

    /** Método que define a imagem de fundo da tela principal
     * Centralizado sem redimencionamento de imagem.
     * @param g
     * @see Graphics
     */
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        int x = (this.getWidth() - fundoLogin.getWidth(null));
        int y = (this.getHeight() - fundoLogin.getHeight(null));
        g.drawImage(fundoLogin, x, y, this);
    }

Segue uma imagem como ficaria:

É isso ae muito simples de se implementar….

Obrigado.

Guilherme B. Zarelli