Java窗体透明化(无边框)
来源:互联网 发布:湘潭大学网络 编辑:程序博客网 时间:2024/05/20 06:54
Java 窗体透明化(无边框)
这几天我在写一个记事本程序,为了方便记事本记事,我准备将记事本界面透明化。于是上网查了一下资料。然后将透明化界面做了出来。
可是在做的过程中我还是遇到了一些小小的问题,所以就把它记录了下来。
问题1:奇怪的错误(访问限制:Access restriction)
透明化窗体中有这样一段代码:
// 判断系统是否支持窗体透明化if (com.sun.awt.AWTUtilities.isWindowOpaque(this)) { // 设置窗体透明化, 透明参数值[0, 1](float类型) com.sun.awt.AWTUtilities.setWindowOpacty(this, 0.5f);} else { JOptionPane.showMessageDialog(this, "系统不支持 JDK版本过低或JRE系统库缺损");]
这段代码明明是没有错的,但是Eclipse却偏偏报了错,这是为什么呢?
通过错误提示,点击 “Configure problem severity” ,我发现了问题所在,原来是eclipse的配置问题。
解决方法如下:
菜单栏找到 Window -> Preferences -> Java Compiler(中间可能省略几步,你可以搜索) -> Errors/Warnings -> Deprecated and restricted API -> Forbidden reference(access rules) 后面的 Error 下拉改成 Warning 或者 Ignore -> 确定。
然后就 OK 了!
问题二:郁闷的异常(IllegalComponentStateException)
当我所有的代码都写完之后,一运行,结果出现了编译异常。当时我想把它抛出去,但是我又是遇到问题不能放的人。所以就找了一下原因。
Exception in thread "main" java.awt.IllegalComponentStateException: The frame is decoratedat java.awt.Frame.setOpacity(Unknown Source)at java.awt.Window$1.setOpacity(Unknown Source)at com.sun.awt.AWTUtilities.setWindowOpacity(Unknown Source)at Opacity.<init>(Opacity.java:18)at Opacity.main(Opacity.java:7)
最后我终于发现了错误的原因,原来是由于我写的窗体是可显示的所以抛出了这样一个异常。
之后我在我的源代码之上加了这么一句就好了。
this.setUndecorated(true); // 禁用窗体装饰,加在前面就好了
关于这个函数我在 《JDK API 1.6.0中文版》查了一下,上面是这样说的。
/*setUndecoratedpublic void setUndecorated(boolean undecorated)禁用或启用此窗体的装饰。只有在窗体不可显示时才调用此方法。 参数:undecorated - 如果没有启用窗体装饰,则为 true;如果启用了窗体装饰,则为 false。 抛出: IllegalComponentStateException - 如果窗体是可显示的。从以下版本开始: 1.4 另请参见:isUndecorated(), Component.isDisplayable(), JFrame.setDefaultLookAndFeelDecorated(boolean)*/
测试源码:
import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;public class Opacity extends JFrame { public static void main(String[] args) { new Opacity(); } Opacity() { this.setTitle("窗体透明化测试"); JButton btn = new JButton(); this.add(btn); double value = 0.4; // 判断是否支持透明度 this.setUndecorated(true); // 禁用或启用此窗体的修饰。只有在窗体不可显示时 //才调用此方法。 if (com.sun.awt.AWTUtilities.isWindowOpaque(this)) { com.sun.awt.AWTUtilities.setWindowOpacity(this, (float)(1 - value)); } else { JOptionPane.showMessageDialog(this, "系统不支持 JDK版本过低或 JRE 系统库缺损"); } this.setBounds(400,400,400,300); this.setDefaultCloseOperation(this.EXIT_ON_CLOSE); this.setVisible(true); }}
转载请注明出处!
此逗比的QQ:1020915098
希望认识一些同我一样热爱技术的人士(要是能认识一些大神就更好了! 嘤嘤~)。
0 0
- Java窗体透明化(无边框)
- WPF无边框透明窗体的缩放
- WPF无边框透明窗体的缩放
- WPF创建无边框透明窗体
- WPF无边框透明窗体的缩放
- pyqt4制作透明无边框窗体
- pyqt4制作透明无边框窗体
- pyqt4制作透明无边框窗体
- WPF圆角透明无边框窗体
- Qt 无边框、透明、可移动的个性窗体
- Qt中设置QML窗体无边框和背景透明
- Qt 无边框、透明、可移动的个性窗体
- WPF中的无边框透明可缩放窗体
- Qt 无边框、透明、可移动、的个性窗体
- iframe透明无边框
- 拖放无边框窗体
- 无边框窗体拖动
- WPF 无边框窗体
- Week Training: 495 Teemo Attacking
- git对比svn有什么优势
- 07_03 使用存储过程查询指定课程
- Centos 7 安装完后出现r,q,c等
- OOP编程
- Java窗体透明化(无边框)
- Ubuntu-16.10安装OpenCV3
- JQuery基础的一些解释
- 文章标题
- 228. Summary Ranges\59. Spiral Matrix II\64. Minimum Path Sum
- 通知的注册和移除的正确姿势 侧滑手势的影响
- Android Studio重写方法时参数显示异常的解决方法
- 关于TPM
- 分布式集群Session共享 简单多tomcat8+redis的session共享实现