Avatar billede fredand Forsker
07. oktober 2003 - 12:57 Der er 1 kommentar og
1 løsning

Transparent Window

Hello!

I try to create a transparent window where the desktop shines throw. But I start to doubt that it is posible.

Perhaps you cuold tell me if it is possible or not.

My code looka like this, but it only gives my a black square.

Perhaps it have something to do with heavyweight componets to do?

Best regards
Fredrik

package glasswindow;

import javax.swing.*;
import java.awt.*;


public class GlassWindow extends JWindow
{
    public GlassWindow()
    {

        Color c = new Color(0.0f, 0.0f, 0.0f, 0.0f);
        setBackground(c);

        setSize(250, 200);
        centerFrameOnScreen();
        show();

    }

    public void update(Graphics g)
    {
        paint(g);
    }

    public void paint(Graphics g)
    {
        g.setColor(new Color(10, 10, 10, 100));

        g.fillRect(10, 10, 100, 100);
    }

    protected void paintComponent(Graphics g)
    {
    }

    public void centerFrameOnScreen()
    {
        Dimension dimension = getToolkit().getScreenSize();
        Rectangle bounds = getBounds();
        setBounds( (dimension.width - bounds.width) / 2, (dimension.height - bounds.height) / 2, 250, 200);
      }


    public static void main(String[] args)
    {
        GlassWindow glassWindow = new GlassWindow();
    }
}
Avatar billede mikkelbm Nybegynder
07. oktober 2003 - 13:32 #1
Here is an example of how it could be done:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import java.awt.image.BufferedImage;

/**
* A demonstration of JFrame/JWindow transparency.
* Creates a draggable, transparent window.
*<p>
* Note: This demo assumes that the background image is static,
* which would not be true in the general case.
*
* @author R. Kevin Cole <cole@NoSpam.cfl.rr.com>
* 03/01/03
*/
//public class TransparentWindow extends JFrame
public class TransparentWindow extends JWindow
{
Dimension preferredSize = new Dimension(320,200);
public Dimension getMinimumSize() { return this.preferredSize; }
public Dimension getPreferredSize() { return this.preferredSize; }
protected int XDiff = 0;
protected int YDiff = 0;
protected static int xpos = 0;
protected static int ypos = 0;
protected static Robot    robot;

Image myImage;

public TransparentWindow() throws Exception
{
  super();

  ((JPanel) getContentPane()).setOpaque(false);
  setSize( getPreferredSize() );
  setBackground( Color.black );

  JPanel panel = (JPanel) getContentPane();
  panel.setBorder( new LineBorder( Color.white ) );
   
  // turn off double-buffering to reduce flicker in this demo
  // -not a good idea in the general case-
  RepaintManager.currentManager(null).setDoubleBufferingEnabled(false);

  addMouseMotionListener(new MyMouseMotionListener());
  robot = new Robot();

  Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  Rectangle rec = new Rectangle();
  rec.setSize( screenSize );
  myImage = robot.createScreenCapture(rec);
}


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

  if( myImage != null )
  {
  Dimension size = getSize();

  g.drawImage( myImage, 1, 1, size.width-2, size.height-2
      , xpos,ypos, xpos+size.width, ypos+size.height
      , null);
  }
}


public class MyMouseMotionListener extends MouseMotionAdapter
{
  public void mousePressed(MouseEvent evt)
  {
  XDiff = evt.getX() - xpos;
  YDiff = evt.getY() - ypos;
  if( XDiff < 0 ) XDiff = -XDiff;
  if( YDiff < 0 ) YDiff = -YDiff;
  }

  public void mouseDragged(MouseEvent e)
  {
  try
  {
    TransparentWindow.this.setLocation( xpos + (e.getX() - XDiff),
    ypos + (e.getY() - YDiff) );

    xpos = xpos + (e.getX() - XDiff);
    ypos = ypos + (e.getY() - YDiff);

    // force a repaint.
    TransparentWindow.this.invalidate();
    TransparentWindow.this.validate();
    TransparentWindow.this.repaint();
  } catch (Exception ex) { ex.printStackTrace(); }
  }
}

public static void main(String[] argv)  throws Exception
{
  TransparentWindow frame = new TransparentWindow();

  //Center the window
  Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  Dimension frameSize = frame.getSize();
  xpos = (screenSize.width - frameSize.width)/2;
  ypos = (screenSize.height - frameSize.height)/2;

  frame.setLocation(xpos,ypos);
  frame.setVisible(true);
    }
}

Link: http://groups.google.dk/groups?q=java+transparent+jframe&hl=da&lr=&ie=UTF-8&oe=UTF-8&selm=qo506v4bqd5csd1qg92i3bkdb6v325cth9%404ax.com&rnum=5
Avatar billede fredand Forsker
07. oktober 2003 - 14:39 #2
CTRL-C CTRL-V!

Thanks mate!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester