Tela Transparente ou qualquer outra forma (oval, triangular e etc...) em java

5 respostas
ellcyo

Ai moçada,

Segue exemplo de Tela Transparente em java.
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import javax.swing.JComponent;

public class TransparentBackground extends JComponent {
    private Image background;

    public TransparentBackground() {
        updateBackground();
    }

    public void updateBackground() {
        try {
            Robot rbt = new Robot();
            Toolkit tk = Toolkit.getDefaultToolkit();
            Dimension dim = tk.getScreenSize();
            
            background = rbt.createScreenCapture(
                    new Rectangle(0, 0, (int) dim.getWidth(),
                    (int) dim.getHeight()));
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void paintComponent(Graphics g) {
        Point pos = this.getLocationOnScreen();
        Point offset = new Point(-pos.x, -pos.y);
        g.drawImage(background, offset.x, offset.y, null);
    }
}

------------Outra Classe

import java.awt.AlphaComposite;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;

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

public class TranparenciaEx1 extends TransparentBackground {
    private AlphaComposite makeComposite(float alpha) {
        int type = AlphaComposite.SRC_OVER;
        return (AlphaComposite.getInstance(type, alpha));
    }

    private void drawSquares(Graphics2D g2d, float alpha) {
        //Composite originalComposite = g2d.getComposite();
        //g2d.setComposite(originalComposite); //Voltar ao composite original
        
        g2d.setComposite(makeComposite(alpha));
        
        ImageIcon Imagem = new javax.swing.ImageIcon( "/fundo_pbase.jpg" );
        //ImageIcon Imagem = new javax.swing.ImageIcon( "/bola.png" );
        Image Ico = new ImageIcon(Imagem.getImage().getScaledInstance(getWidth(), getHeight(), 1)).getImage();
        g2d.drawImage(Ico, 0, 0, this);
        
        //g2d.setPaint(Color.BLACK);
        //g2d.fill( this.getBounds() );
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        Graphics2D g2d = (Graphics2D) g;
        

        //drawSquares(g2d, 1 * 0.1F);
        //drawSquares(g2d, 2 * 0.1F);
        //drawSquares(g2d, 3 * 0.1F);
        //drawSquares(g2d, 4 * 0.1F);
        //drawSquares(g2d, 5 * 0.1F);
        //drawSquares(g2d, 6 * 0.1F);
        drawSquares(g2d, 7 * 0.1F);
        //drawSquares(g2d, 8 * 0.1F);
        //drawSquares(g2d, 9 * 0.1F);
        //drawSquares(g2d, 10 * 0.1F);
        
        //g2d.translate(deltaX, 0);

//        for (int i = 0; i < 11; i++) {
//            drawSquares(g2d, i * 0.1F);
//            g2d.translate(deltaX, 0);
//        }
    }

    public static JFrame openInJFrame(Container content) {
        JFrame frame = new JFrame("Transparente");
        //frame.setUndecorated(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 400);
        frame.setLocationRelativeTo(null);
        
        content.setLayout(null);
        
        frame.getContentPane().add( content );

        frame.setVisible(true);
        return (frame);
    }

    public static void main(String[] args) {
        openInJFrame(new TranparenciaEx1()); 
    }
}

5 Respostas

ViniGodoy

Legal!
Já tinha visto isso aqui?
http://fivedots.coe.psu.ac.th/~ad/jg/ch045/index.html

maior_abandonado

orra kra, legal, mto legal mesmo sua tela transparente… futuramente eu pretendo aprender a fazer algo parecido…

só uma coisa que pode melhorar (não criticando, isso é mto legal…talves uma critica construtiva), é que ela ta pegando o fundo q ta atras ok, mais se eu pega a janela e arrasta pro lado, ele mantem o fundo da posição anterior, do lado da atual… sugiro “re-pega” o fundo com o evento de arrastar a janela ou algo do tipo,…sei la… nem sei se isso é possivel…quando eu maximizo a janela, ou minimizo denovo e volta ta atualizando…

mto legal mesmo, parabens

R

Alguem sabe resolver essa melhoria citada por maior_abandonado abaixo?? De tirar o fundo da tranparencia quando a mesma e arrastada??

R

Pessoal andei pesquisando e descobrir que para resolver essa situacao tem que se criar uma thred utilizando o metodo repaint(); para ficar fazendo atualizacao…mais nao conseguir…alguem pode me ajudar…???

public void run() {

Thread myThread = Thread.currentThread();

while (myThread !=null) {

repaint();

try {

Thread.sleep(1000);

} catch (InterruptedException e){

}
}
}

public static void main(String str[])

{

Clock myclock=new Clock();

Thread myThread=new Thread(myclock);

myThread.start();

}

LINK:

http://www.artima.com/forums/flat.jsp?forum=1&thread=149939

ViniGodoy

Duas dicas:

  1. Não pegue carona no tópico dos outros. Sua dúvida não tem absolutamente nada a ver com o assunto original. Eu quase não vi!
  2. Sempre que postar código, use a tag code, veja como aqui.

Agora, vamos a sua dúvida. Acho que o exemplo abaixo (ou qualquer um dos dois exemplos na página posterior a ele) podem te ajudar:
http://www.guj.com.br/posts/list/52964.java#279083

Criado 20 de fevereiro de 2008
Ultima resposta 26 de fev. de 2008
Respostas 5
Participantes 4