今天在这个网站上http://www.iteye.com/topic/707514
看到了制作不规则JFrame窗口的方法,利用AWTUtilities.setWindowOpaque(Jframe true);方法将JFrame设置为透明,
然后再JPanel上画图,相当于直接在桌面上画图,
可是无轮我怎么试验都透明不了,
即使复制教程里一模一样的代码进去也一样,怎么回事啊,是我的系统环境问题还是编译器问题?
这是一个最简单的例子,可是还是运行不了,求教各位大神啊,我快疯了,这个问题折腾一天了:import java.awt.*;
import javax.swing.*;
import com.sun.awt.AWTUtilities;public class MyJFrame extends JFrame { public MyJFrame() {
setVisible(true);
AWTUtilities.setWindowOpaque(this, false);
setSize(640,480);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} public static void main(String[] args) {
MyJFrame j = new MyJFrame();
}
}
看到了制作不规则JFrame窗口的方法,利用AWTUtilities.setWindowOpaque(Jframe true);方法将JFrame设置为透明,
然后再JPanel上画图,相当于直接在桌面上画图,
可是无轮我怎么试验都透明不了,
即使复制教程里一模一样的代码进去也一样,怎么回事啊,是我的系统环境问题还是编译器问题?
这是一个最简单的例子,可是还是运行不了,求教各位大神啊,我快疯了,这个问题折腾一天了:import java.awt.*;
import javax.swing.*;
import com.sun.awt.AWTUtilities;public class MyJFrame extends JFrame { public MyJFrame() {
setVisible(true);
AWTUtilities.setWindowOpaque(this, false);
setSize(640,480);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} public static void main(String[] args) {
MyJFrame j = new MyJFrame();
}
}
Exception in thread "main" java.awt.IllegalComponentStateException: The frame is decorated
at java.awt.Frame.setBackground(Frame.java:986)
at java.awt.Window$1.setOpaque(Window.java:4021)
at com.sun.awt.AWTUtilities.setWindowOpaque(AWTUtilities.java:360)
at pack.newpackage.MyJFrame.<init>(MyJFrame.java:12)
at pack.newpackage.MyJFrame.main(MyJFrame.java:18)虽然可以运行,但编译器报错,就是实现不了透明效果,即使我复制教程网上一模一样的代码,也一样报错。
到底为什么啊?
import javax.swing.*;
import com.sun.awt.AWTUtilities;public class MyJFrame extends JFrame { public MyJFrame() {
setVisible(true);
AWTUtilities.setWindowOpaque(this, false);
setSize(640,480);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} public static void main(String[] args) {
MyJFrame j = new MyJFrame();
}
}
import javax.swing.*;
import com.sun.awt.AWTUtilities;public class MyJFrame extends JFrame { public MyJFrame() {
super("透明窗体");
this.setLayout(new FlowLayout());
this.add(new JButton("按钮"));
this.add(new JCheckBox("复选按钮"));
this.add(new JRadioButton("单选按钮"));
this.add(new JProgressBar(20, 100));
this.setSize(new Dimension(400, 300));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// this.setUndecorated(true);
} public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Window w = new MyJFrame(); com.sun.awt.AWTUtilities.setWindowOpacity(w, 0.63f);
w.setVisible(true);
}
});
}
}
最新版本的NETBEAN应该不会有问题啊
我不管用NetBeans还是myeclipse都会提出如下错误,
把那句实现透明的com.sun.awt.AWTUtilities.setWindowOpacity(w, 0.63f);去掉就没问题,run:
Exception in thread "AWT-EventQueue-0" java.awt.IllegalComponentStateException: The frame is decorated
at java.awt.Frame.setOpacity(Frame.java:960)
at java.awt.Window$1.setOpacity(Window.java:4008)
at com.sun.awt.AWTUtilities.setWindowOpacity(AWTUtilities.java:174)
at newpackage.MyJFrame$1.run(MyJFrame.java:26)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
我百度下也几乎没有多少人搞这个,别人好像也没这情况。
到贴吧问也没人懂,
我换宿友的电脑编译也不可以,我快疯了,大神帮帮忙啊