É possivel sim.
Tem um artigo completo sobre isso aqui:
http://www.onjava.com/pub/a/onjava/excerpt/swinghks_hack41/index.html
Esse é um artigo extraído do livro Swing Hacks, escrito por Joshua Marinacci e Chris Adamson.
Grande abraço,
Hugo.
É possivel sim.
Tem um artigo completo sobre isso aqui:
http://www.onjava.com/pub/a/onjava/excerpt/swinghks_hack41/index.html
Esse é um artigo extraído do livro Swing Hacks, escrito por Joshua Marinacci e Chris Adamson.
Grande abraço,
Hugo.
Bem, sobre esse snapBackground, se tá funcionando sem devem ter colocado e esquecido de tirar antes mesmo
Sobre a forma da imagem, é só colocar lá um JLabel com ela no meio do form e pronto, lembrando que a imagem deve ter o fundo transparente. Ou ainda criando um componente para desenhar ela no fundo, tipo um JPanel, para poder colocar uns botões em cima e tal…
flw
Dá uma olhada nesse código …
Obs: as duas imagens que vc postou, nenhum tá com fundo trasparente
[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);
}
}[/code]
[code]import java.awt.BorderLayout;
import java.awt.Point;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;
import java.util.Date;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class MyFrame extends JFrame implements
ComponentListener,WindowFocusListener,Runnable {
private TransparentBackground transpPanel = null;
private boolean refreshRequested = true;
private long lastupdate = 0;
public MyFrame() {
setUndecorated(true);
setSize(500, 500);
setLocation(20, 20);
getContentPane().add(getPanelComponents());
addComponentListener(this);
addWindowFocusListener(this);
new Thread(this).start( );
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
private JComponent getPanelComponents() {
transpPanel = new TransparentBackground();
BorderLayout layout = new BorderLayout();
transpPanel.setLayout(layout);
ImageIcon icon = createImageIcon("BOLA-NIKE.jpg",
"imagem mascote java");
JLabel label = new JLabel(icon);
transpPanel.add(label);;
return transpPanel;
}
/** Returns an ImageIcon, or null if the path was invalid. */
protected static ImageIcon createImageIcon(String path,
String description) {
java.net.URL imgURL = MyFrame.class.getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL, description);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
public void refresh( ) {
if(isVisible( )) {
repaint( );
refreshRequested = true;
lastupdate = new Date( ).getTime( );
}
}
public void run( ) {
try {
while(true) {
Thread.sleep(1);
long now = new Date( ).getTime( );
if(refreshRequested &&
((now - lastupdate) > 1000)) {
if(isVisible( )) {
Point location = getLocation( );
setVisible(false);
transpPanel.updateBackground( );
setVisible(true);
setLocation(location);
refresh( );
}
lastupdate = now;
refreshRequested = false;
}
}
} catch (Exception ex) {
ex.printStackTrace( );
}
}
public void componentShown(ComponentEvent evt) { repaint( ); }
public void componentResized(ComponentEvent evt) { repaint( ); }
public void componentMoved(ComponentEvent evt) { repaint( ); }
public void componentHidden(ComponentEvent evt) { }
public void windowGainedFocus(WindowEvent evt) { refresh( ); }
public void windowLostFocus(WindowEvent evt) { refresh( ); }
public static void main(String[] args){
MyFrame fr = new MyFrame();
}
}[/code]
Ghostt,
poderia me passar a sua solução para este problema?
Valeu!
Pessoal,
É possivel criar uma aplicação que ela possua uma imagem de fundo, por exemplo, uma foto de uma bola, onde apenas a bola apareça, onde a imagem possue area transparente ao seu redor, e a aplicação possua o formato da bola (formato circular), deixando de mostra a área transparente?
É possivel isso?
Obrigado pela atenção!
Valeu Hugo!
Vou dar uma olhada no site e ver o que consigo resolver!
Obrigado!
Aquele abraço!
Entrei no site, fiz alguns testes, mas quando fui alterar a parte:
[code]public static void main(String[] args) {
JFrame frame = new JFrame(“Transparent Window”);
frame.setUndecorated(true);
TransparentBackground bg = new TransparentBackground(frame);
bg.snapBackground( );
bg.setLayout(new BorderLayout( ));
JPanel panel = new JPanel( ) {
public void paintComponent(Graphics g) {
g.setColor(Color.blue);
Image img = new ImageIcon(“mp3.png”).getImage( );
g.drawImage(img,0,0,null);
}
};
panel.setOpaque(false);
bg.add("Center",panel);
frame.getContentPane( ).add("Center",bg);
frame.pack( );
frame.setSize(200,200);
frame.setLocation(500,500);
frame.show( );
}[/code]
Ocorreu um erro em:
Dizendo que não encontrava este método, de fato, ele não existe no codigo…
Inserir esta linha pq tenho necessidade de utilizar uma imagem, para usar o trecho acima desabilitei o:
Mas ai não funcionou corretamente.
Segue abaixo o codigo completo:
[code]import javax.swing.;
import java.awt.;
import java.awt.event.;
import java.awt.image.;
public class TransparentBackground extends JComponent
implements ComponentListener, WindowFocusListener, Runnable
{
private JFrame _frame;
private BufferedImage _background;
private long _lastUpdate = 0;
private boolean _refreshRequested = true;
private Robot _robot;
private Rectangle _screenRect;
private ConvolveOp _blurOp;
// constructor -------------------------------------------------------------
public TransparentBackground(JFrame frame)
{
_frame = frame;
try
{
_robot = new Robot();
}
catch (AWTException e)
{
e.printStackTrace();
return;
}
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
_screenRect = new Rectangle(dim.width, dim.height);
float[] my_kernel =
{
0.10f, 0.10f, 0.10f,
0.10f, 0.20f, 0.10f,
0.10f, 0.10f, 0.10f};
_blurOp = new ConvolveOp(new Kernel(3, 3, my_kernel));
updateBackground();
_frame.addComponentListener(this);
_frame.addWindowFocusListener(this);
new Thread(this).start();
}
// protected ---------------------------------------------------------------
protected void updateBackground()
{
_background = _robot.createScreenCapture(_screenRect);
}
protected void refresh()
{
if (_frame.isVisible() && this.isVisible())
{
repaint();
_refreshRequested = true;
_lastUpdate = System.currentTimeMillis();
}
}
// JComponent --------------------------------------------------------------
protected void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
Point pos = this.getLocationOnScreen();
BufferedImage buf = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB);
buf.getGraphics().drawImage(_background, -pos.x, -pos.y, null);
Image img = _blurOp.filter(buf, null);
g2.drawImage(img, 0, 0, null);
g2.setColor(new Color(255, 255, 255, 192));
g2.fillRect(0, 0, getWidth(), getHeight());
}
// ComponentListener -------------------------------------------------------
public void componentHidden(ComponentEvent e) { }
public void componentMoved(ComponentEvent e)
{
repaint();
}
public void componentResized(ComponentEvent e)
{
repaint();
}
public void componentShown(ComponentEvent e)
{
repaint();
}
// WindowFocusListener -----------------------------------------------------
public void windowGainedFocus(WindowEvent e)
{
refresh();
}
public void windowLostFocus(WindowEvent e)
{
refresh();
}
// Runnable ----------------------------------------------------------------
public void run()
{
try
{
while (true)
{
Thread.sleep(100);
long now = System.currentTimeMillis();
if (_refreshRequested && ((now - _lastUpdate) > 1000))
{
if (_frame.isVisible())
{
Point location = _frame.getLocation();
_frame.setLocation(-_frame.getWidth(), -_frame.getHeight());
updateBackground();
_frame.setLocation(location);
refresh();
}
_lastUpdate = now;
_refreshRequested = false;
}
}
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
JFrame frame = new JFrame("Transparent Window");
frame.setUndecorated(true);
TransparentBackground bg = new TransparentBackground(frame);
//bg.snapBackground( );
bg.setLayout(new BorderLayout( ));
JPanel panel = new JPanel( )
{
public void paintComponent(Graphics g)
{
g.setColor(Color.blue);
Image img = new ImageIcon("duke.png").getImage( );
g.drawImage(img,0,0,null);
}
};
panel.setOpaque(false);
bg.add("Center",panel);
frame.getContentPane( ).add("Center",bg);
frame.pack( );
frame.setSize(200,200);
frame.setLocation(500,500);
frame.show( );
}
}[/code]
Como eu resolvo este problema?
Primeiro fazer o form ficar com o formato da imagem e segundo, a falta de codigo… Qual será o processo realizado dentro do snapBackground( ); :?:
Valeu Eduardo!!!
Sua dica foi muito importante no processo!!!
Obrigado :!: :thumbup:
Valeu Rodrigo!
De tanto procurar na net acabei achando um código onde demonstrava corretamente a transparencia.
Também utilizei o seu código!
Obrigado a todos pela ajuda :!: :thumbup: