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

Ai moçada,

Segue exemplo de Tela Transparente em java.

[code]
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()); 
}

}[/code]

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

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

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

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

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