Java JFrame错误解决方法

Java JFrame错误解决方法,java,swing,netbeans,jframe,Java,Swing,Netbeans,Jframe,我在编写应用程序时发现了一些奇怪的东西: 我想在整个屏幕上放置一个JFrame。它与以下代码完美配合: public class NativeFunctions extends JFrame { public NativeFunctions() throws HeadlessException { this.setUndecorated(true); this.setExtendedState(JFrame.MAXIMIZED_BOTH);

我在编写应用程序时发现了一些奇怪的东西: 我想在整个屏幕上放置一个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值),单击将被注册。但这只发生在最外面的角落

你能复制这个吗?你会说它是一个bug吗?你有解决问题的办法吗

编辑:同样重要:所有透明度值相同!只在最外面的角落工作,而不是在应用程序的中间,所以鼠标点击一般不会通过!p> (使用alpha值)并将注册单击。但这只发生在最外面的角落

您需要定义“已注册”

在我的例子中,无论我在哪里单击,都不会发生任何事情,因为所有鼠标事件都只是传递到帧,但没有向帧添加侦听器,因此我没有任何刚刚发生的事情的线索

这就是我预期的部分透明度(alpha值介于1-255之间)的情况

但是,如果alpha值为0,则Swing应用程序将忽略鼠标事件并将其传递到桌面

例如,如果我单击Windows开始按钮所在的左下角,我会看到开始菜单弹出窗口

如果单击其他任何位置,则我单击的应用程序现在已激活,并成为活动窗口

“最外面的角落”(你怎么定义它?)和点击屏幕中央没有区别

你有解决问题的办法吗

我猜当alpha值在1-255之间时,您希望阻止鼠标事件传递到destop

你有没有试着在相框上加一个鼠标听筒


也许你可以尝试在框架中添加一个
玻璃窗格
,在玻璃窗格中添加一个鼠标听筒?

经过一段时间的测试,我发现了“bug”是什么。Java中没有Bug,但奇怪的是,它与Netbeans有关。每当我从Netbeans启动程序时,它都不起作用(我在问题中描述的情况发生了),但当我启动.jar文件时,它就完美地工作了

这根本不是真的!正如我在上面写的,鼠标点击只在最外面的角落起作用!其他任何地方都不会!而且这不是100%透明的,适用于所有透明值。@程序员:什么操作系统/L&F?@CatalinaIsland Windows 10 Education,最新Java版本当使用部分透明(alpha值在1-255之间)时,我可以在任何地方单击,而不会发生任何事情。这是因为事件被传递到帧。所以基本上桌面会冻结,因为我不能点击任何东西。使用完全透明(alpha值为0)时,事件由框架下的应用程序处理。例如,如果我单击“开始”按钮,则在底部/左侧会显示开始菜单。或者,如果我单击窗口中的任何其他位置,我单击的应用程序现在将具有焦点。@camickr您似乎也无法阅读!我说它不做任何事情,无论我点击,除了最外面的角落!只需运行代码并尝试…
,点击就会被注册。
-你怎么知道?这对你意味着什么。您还没有在框架中添加鼠标侦听器,因此如何才能说它已注册。发布一个适当的例子来演示你的陈述。@camickr我发布了一个完整的例子。就这样。如果你运行它,问题就会重现。“registered”不是指JFrame事件,而是指操作系统的正常操作,就像屏幕上没有帧一样。而且您还没有定义“最外面的角落”。如果我们不确定你的意思,人们如何测试。我们说的是桌面边缘的4-5像素吗?这可能是为框架周围的边界保留的区域。或者是一个更大的区域。我试着在每个角点一个像素,但没有注意到行为上的差异。@camickr我在这里标记了我所说的位置:这是你必须点击的最外面的1像素角