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;
}
}
分享到:
相关推荐
继承与java.swing.Frame类的透明窗体类,实现了窗口的透明,还存在一点点小BUG,欢迎交流。
### Java Swing 实现窗口半透明效果详解 #### 标题与描述解读 “Java窗口半透明”这一主题涉及如何在Java Swing中实现图形用户界面(GUI)中的窗口或组件具有半透明的效果。这对于创建视觉上吸引人的应用或者游戏...
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, ...
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实现透明窗体,并通过提供的`ShellWindowBorderPane`代码示例进行...
在Java编程语言中,开发人员有时需要创建具有特殊视觉效果的窗口,比如透明窗口或具有任意形状的窗口。这些功能在早期版本的Java中可能难以实现,但自JDK6开始,Java引入了一些新特性,使得这样的效果变得可能。本文...
以上就是使用Java Swing创建不规则窗口和半透明窗口的基本方法。在实际开发中,你可以根据需求调整形状、添加复杂图形以及处理鼠标和键盘事件,以实现更丰富的交互效果。此外,还要注意性能问题,因为不规则窗口的...
Java 7通过`java.awt.Window`类的`setOpacity()`方法实现了窗口透明性。这个方法允许开发者设置窗口的不透明度,参数范围从0.0(完全透明)到1.0(完全不透明)。例如,你可以这样设置一个窗口为50%的透明度: ```...
其中test的几个类是播放flash的,只看flashTest01.java就行了!...里面还有jflashplayer.jar(FlashPanle类可以实现播放flash),jan.zip,examples.jar(WindowUtils可以实现窗口透明和穿透、改变窗口形状)
《透明窗口技术详解》 在计算机用户界面设计中,透明窗口是一种常见的视觉效果,它可以提升用户的操作体验,使界面更具吸引力。"完整版透明窗口.e.rar" 文件可能包含了一个实现透明窗口功能的软件或者相关教程,...
在Java中,可以通过`setOpacity()`方法来设置窗口的透明度,使其部分透明,从而与背景融为一体。 2. **窗口位置**:漂浮窗口通常需要在屏幕的特定位置显示,例如固定在屏幕边缘或者跟随鼠标移动。这需要通过监听...
在IT领域,悬浮窗口和半透明窗口是用户界面设计中常见的元素,它们为应用程序提供了独特的交互体验和视觉效果。在本篇文章中,我们将深入探讨这两种技术,并通过源码分析来理解其工作原理。 首先,悬浮窗口是一种...
然而,有时候我们希望为`JFrame`添加更丰富的视觉效果,比如阴影边框和透明窗口。在给定的场景中,我们将探讨如何实现`JFrame`的窗口透明以及添加阴影边框效果。 首先,要实现`JFrame`的透明,我们需要设置`JFrame`...
java1.7制作,实现记事功能,可以添加记事,查看列表.目前记事本还有小bug,不适合实际应用,只是提供源码供大家交流.
首先,要实现半透明窗口,你需要了解`java.awt.Transparency`接口和`java.awt.AlphaComposite`类。`Transparency`接口定义了组件的透明度级别,而`AlphaComposite`类则控制着图形绘制时的透明度混合规则。在Swing中...
在编程语言如C++、C#、Java中,也有相应的库和框架支持透明窗口的实现。例如,在C#中,可以使用`Form`类的`TransparencyKey`和`Opacity`属性来设置窗口的透明度。而在Java中,`JFrame`类提供了`setOpaque(false)`...
标题中的“dwm透明防截图”是指Windows操作系统中的Desktop Window Manager (DWM)技术,用于实现窗口的透明化效果,并且这种透明化可以用来防止屏幕截图。DWM是Windows Vista及更高版本中引入的一个功能,它负责窗口...
在计算机操作系统中,设置窗口透明度以及更换透明后面背景是一项常用的功能,这使得用户可以更加灵活地管理和组织桌面窗口,提升工作和娱乐的体验。在本文中,我们将深入探讨这一主题,了解如何实现窗口透明度调整,...
在这个“java拖拽透明组件源码”中,我们主要关注的是如何在Swing环境中创建一个可拖动的透明组件。 拖拽功能在Java中可以通过实现`TransferHandler`类和使用`MouseListener`与`MouseMotionListener`接口来完成。`...