我在编写应用程序时发现了一些奇怪的东西: 我希望将JFrame放在整个屏幕上。它与此代码完美配合:
public class NativeFunctions extends JFrame {
public NativeFunctions() throws HeadlessException {
this.setUndecorated(true);
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
this.setBackground(new Color(0, 0, 0));
this.setVisible(true);
}
public static void main(String[] args) {
NativeFunctions n = new NativeFunctions();
}
}
当我只更改代码行时,将颜色设置为带有alpha值的颜色,事情开始变得怪异:
public class NativeFunctions extends JFrame {
public NativeFunctions() throws HeadlessException {
this.setUndecorated(true);
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
this.setBackground(new Color(0, 0, 0, 20));
this.setVisible(true);
}
public static void main(String[] args) {
NativeFunctions n = new NativeFunctions();
}
}
启动第一个应用程序,JFrame会打开并覆盖屏幕 - 正如预期的那样。尝试在左上角,右上角,右下角或左下角移动鼠标,然后按鼠标键。什么都不会发生。 对第二个应用程序执行相同的操作(使用alpha值),然后注册单击。但这只发生在最外层!
你可以重现这个并且你会说这是一个错误吗?你对解决方法有什么想法吗?
编辑:同样重要:对于所有透明度值都一样!仅适用于最外角,而不是应用程序的中间,因此鼠标单击通常不会通过!
答案 0 :(得分:0)
(带有alpha值),点击将被注册。但这只发生在最外层!
您需要定义“已注册”。
在我的情况下,没有任何反应,无论我在哪里点击,因为所有鼠标事件都只是传递给帧,但没有添加到框架中,所以我没有提示任何事情发生。
这是我期望部分透明度发生的事情(alpha值在1 - 255之间)。
但是,如果alpha值为0,则Swing应用程序会忽略鼠标事件并将其传递给桌面。
因此,例如,如果我点击Windows开始按钮所在的底部/左侧,我会看到“开始”菜单弹出窗口。
如果我点击其他地方,那么我点击的应用程序现在已激活并成为活动窗口。
“最外角”之间没有区别(但是你定义了?)并点击了屏幕的中心。
您对解决方法有什么想法吗?
我猜你想要防止鼠标事件在1到255之间传递给destop。
您是否尝试将MouseListener添加到框架中?
也许你可以尝试在框架中添加GlassPane
并将一个MouseListener添加到GlassPane?
答案 1 :(得分:0)
经过一段时间的测试后,我发现了" bug"是。 Java中没有Bug,但奇怪的是它与Netbeans有关。每当我从Netbeans启动程序时它都无法工作(我在问题中描述的内容发生了)但是当我启动.jar文件时它完美地完成了!