JFrame Bug解决方法

时间:2018-05-08 15:27:46

标签: java swing netbeans jframe

我在编写应用程序时发现了一些奇怪的东西: 我希望将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值),然后注册单击。但这只发生在最外层!

你可以重现这个并且你会说这是一个错误吗?你对解决方法有什么想法吗?

编辑:同样重要:对于所有透明度值都一样!仅适用于最外角,而不是应用程序的中间,因此鼠标单击通常不会通过!

2 个答案:

答案 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文件时它完美地完成了!