`
wuzijingaip
  • 浏览: 329990 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java 透明窗口

阅读更多
java 1.5 以及之前的版本是不支持透明窗体的,不过可以以假乱真来实现,
import java.awt.BorderLayout;
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 java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.UIManager;

import com.birosoft.liquid.LiquidLookAndFeel;

public class TestEvent extends JComponent
  implements ComponentListener,WindowFocusListener {
 
 private JFrame frame;

 private boolean start = false;

 private Image background;

 private Point p;

 // 获得当前屏幕快照
 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) {
   // p(ex.toString());
   // 此方法没有申明过 ,因为无法得知上下文 。因为不影响执行效果 ,先注释掉它 ex.printStackTrace();
  }

 }

 // 将窗口掉离出屏幕以获得纯粹的背景图象
 public void refresh() {
  if (start == true) {
   this.updateBackground();
   frame.setLocation(p);
   if (p.x < 0 || p.y < 0)
    frame.setLocation(0, 0);
   this.repaint();
  }
 }

 public void componentHidden(ComponentEvent e) {
  System.out.println("Hidden");
 }

 // 窗口移动时
 public void componentMoved(ComponentEvent e) {
  System.out.println("moved");
  this.repaint();
 }

 // 窗口改变大小时
 public void componentResized(ComponentEvent e) {
  System.out.println("resized");
  this.repaint();
 }

 public void componentShown(ComponentEvent e) {
  System.out.println("shown");
 }

 // 窗口得到焦点后,用refresh()方法更新界面
 public void windowGainedFocus(WindowEvent e) {
  System.out.println("gainedFocus");
  refresh();
  start = false;
 }

 // 窗口失去焦点后,将其移出屏幕
 public void windowLostFocus(WindowEvent e) {
  System.out.println("lostFocus");
  if (frame.isShowing() == true) {
   System.out.println("visible");
  } else {
   System.out.println("invisible");
  }
  start = true;
  p = frame.getLocation();
  frame.setLocation(-2000, -2000);
 }

 public TestEvent(JFrame frame) {
  super();
  this.frame = frame;
  updateBackground();
  this.setSize(200, 120);
  this.setVisible(true);
  frame.addComponentListener(this);
  frame.addWindowFocusListener(this);

 }

 // 绘制外观,注意,其中 pos,offset 是为了将特定部分的图象贴到窗口上
 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);
 }

 /**
  * @param args
  */
 public static void main(String[] args) {
  try {
   // UIManager.setLookAndFeel("org.fife.plaf.Office2003.Office2003LookAndFeel");
   // UIManager.setLookAndFeel("org.fife.plaf.OfficeXP.OfficeXPLookAndFeel");
   // UIManager.setLookAndFeel("org.fife.plaf.OfficeXP.OfficeXPLookAndFeel");
   UIManager.setLookAndFeel("com.birosoft.liquid.LiquidLookAndFeel");
   LiquidLookAndFeel.setLiquidDecorations(true);
   // LiquidLookAndFeel.setLiquidDecorations(true, "mac");
   // UIManager.setLookAndFeel(new SubstanceLookAndFeel());
   // UIManager.setLookAndFeel(new SmoothLookAndFeel());
   // UIManager.setLookAndFeel(new QuaquaLookAndFeel());
   // UIManager.put("swing.boldMetal", false);
   if (System.getProperty("substancelaf.useDecorations") == null) {
    JFrame.setDefaultLookAndFeelDecorated(true);
    // JDialog.setDefaultLookAndFeelDecorated(true);
   }
   System.setProperty("sun.awt.noerasebackground", "true");
   // SubstanceLookAndFeel.setCurrentTheme(new
   // SubstanceLightAquaTheme());

   // UIManager.setLookAndFeel("org.fife.plaf.VisualStudio2005.VisualStudio2005LookAndFeel");
  } catch (Exception e) {
   System.err.println("Oops!  Something went wrong!");
  }

  JFrame frame = new JFrame("Transparent Window");
  TestEvent t = new TestEvent(frame);
  t.setLayout(new BorderLayout());
  JButton button = new JButton("This is a button");
  t.add("North", button);
  JLabel label = new JLabel("This is a label");
  t.add("South", label);
  frame.getContentPane().add("Center", t);
  frame.pack();
  frame.setSize(150, 100);
  frame.show();
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  // t.start=true;
 }

}



分享到:
评论
1 楼 国仔饼 2011-12-15  
   

相关推荐

    java透明窗体

    继承与java.swing.Frame类的透明窗体类,实现了窗口的透明,还存在一点点小BUG,欢迎交流。

    java窗口半透明

    ### Java Swing 实现窗口半透明效果详解 #### 标题与描述解读 “Java窗口半透明”这一主题涉及如何在Java Swing中实现图形用户界面(GUI)中的窗口或组件具有半透明的效果。这对于创建视觉上吸引人的应用或者游戏...

    java 透明界面 java 透明界面

    super("透明窗口"); super.setIconImage(new ImageIcon("images/126.JPG").getImage()); jl.setFont(new Font("", Font.BOLD, 32)); js.setValue(100); jp.add(js); add(jl, BorderLayout.CENTER); add(jp, ...

    java中透明窗口 再也不用局限于矩形窗口了

    mport java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class test { ImageIcon imageIcon =new ImageIcon("透明旋转枫.gif");//images这个...

    java实现透明窗体

    在Java编程语言中,创建一个透明的窗体是一项有趣且实用的技术,它可以为应用程序提供更加美观和现代的外观。在本篇文章中,我们将探讨如何利用Java实现透明窗体,并通过提供的`ShellWindowBorderPane`代码示例进行...

    Java创建透明与任意形状窗口

    在Java编程语言中,开发人员有时需要创建具有特殊视觉效果的窗口,比如透明窗口或具有任意形状的窗口。这些功能在早期版本的Java中可能难以实现,但自JDK6开始,Java引入了一些新特性,使得这样的效果变得可能。本文...

    JAVA创建不规则窗口

    以上就是使用Java Swing创建不规则窗口和半透明窗口的基本方法。在实际开发中,你可以根据需求调整形状、添加复杂图形以及处理鼠标和键盘事件,以实现更丰富的交互效果。此外,还要注意性能问题,因为不规则窗口的...

    JAVA7新特性透明窗体代码

    Java 7通过`java.awt.Window`类的`setOpacity()`方法实现了窗口透明性。这个方法允许开发者设置窗口的不透明度,参数范围从0.0(完全透明)到1.0(完全不透明)。例如,你可以这样设置一个窗口为50%的透明度: ```...

    用java窗口播放flash,java窗口可设置透明度

    其中test的几个类是播放flash的,只看flashTest01.java就行了!...里面还有jflashplayer.jar(FlashPanle类可以实现播放flash),jan.zip,examples.jar(WindowUtils可以实现窗口透明和穿透、改变窗口形状)

    完整版透明窗口.e.rar

    《透明窗口技术详解》 在计算机用户界面设计中,透明窗口是一种常见的视觉效果,它可以提升用户的操作体验,使界面更具吸引力。"完整版透明窗口.e.rar" 文件可能包含了一个实现透明窗口功能的软件或者相关教程,...

    java漂浮窗口源代码

    在Java中,可以通过`setOpacity()`方法来设置窗口的透明度,使其部分透明,从而与背景融为一体。 2. **窗口位置**:漂浮窗口通常需要在屏幕的特定位置显示,例如固定在屏幕边缘或者跟随鼠标移动。这需要通过监听...

    悬浮窗口以及半透明窗口

    在IT领域,悬浮窗口和半透明窗口是用户界面设计中常见的元素,它们为应用程序提供了独特的交互体验和视觉效果。在本篇文章中,我们将深入探讨这两种技术,并通过源码分析来理解其工作原理。 首先,悬浮窗口是一种...

    JFrame边框阴影效果,窗口透明,组件不透明

    然而,有时候我们希望为`JFrame`添加更丰富的视觉效果,比如阴影边框和透明窗口。在给定的场景中,我们将探讨如何实现`JFrame`的窗口透明以及添加阴影边框效果。 首先,要实现`JFrame`的透明,我们需要设置`JFrame`...

    [透明记事本]java制作,主窗口半透明,包内附源码

    java1.7制作,实现记事功能,可以添加记事,查看列表.目前记事本还有小bug,不适合实际应用,只是提供源码供大家交流.

    Swing实现半透明窗口的Sample

    首先,要实现半透明窗口,你需要了解`java.awt.Transparency`接口和`java.awt.AlphaComposite`类。`Transparency`接口定义了组件的透明度级别,而`AlphaComposite`类则控制着图形绘制时的透明度混合规则。在Swing中...

    完整版透明窗口.rar

    在编程语言如C++、C#、Java中,也有相应的库和框架支持透明窗口的实现。例如,在C#中,可以使用`Form`类的`TransparencyKey`和`Opacity`属性来设置窗口的透明度。而在Java中,`JFrame`类提供了`setOpaque(false)`...

    dwm透明防截图,dw图片透明度,Java

    标题中的“dwm透明防截图”是指Windows操作系统中的Desktop Window Manager (DWM)技术,用于实现窗口的透明化效果,并且这种透明化可以用来防止屏幕截图。DWM是Windows Vista及更高版本中引入的一个功能,它负责窗口...

    设置窗口透明度、更换透明后面的背景

    在计算机操作系统中,设置窗口透明度以及更换透明后面背景是一项常用的功能,这使得用户可以更加灵活地管理和组织桌面窗口,提升工作和娱乐的体验。在本文中,我们将深入探讨这一主题,了解如何实现窗口透明度调整,...

    java拖拽透明组件源码

    在这个“java拖拽透明组件源码”中,我们主要关注的是如何在Swing环境中创建一个可拖动的透明组件。 拖拽功能在Java中可以通过实现`TransferHandler`类和使用`MouseListener`与`MouseMotionListener`接口来完成。`...

Global site tag (gtag.js) - Google Analytics