java - 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 值)执行相同的操作,然后单击将被注册。但这仅发生在最外角!
你能重现这个,你会说这是一个错误吗?您有解决方法的想法吗?
编辑:也很重要:对于所有透明度值都相同!只在最外角起作用,不在应用中间,所以鼠标点击一般不会经过!
解决方案
(带有 alpha 值)并且点击将被注册。但这仅发生在最外角!
您需要定义“已注册”。
就我而言,无论我在哪里单击,都不会发生任何事情,因为所有鼠标事件都只是传递给框架,但是框架中没有添加任何侦听器,所以我不知道刚刚发生了什么。
这就是我期望部分透明(alpha 值在 1 - 255 之间)时会发生的情况。
但是,如果 alpha 值为 0,则鼠标事件将被 Swing 应用程序忽略并传递到桌面。
因此,例如,如果我单击 Windows“开始”按钮所在的底部/左侧,我会看到“开始”菜单弹出窗口。
如果我点击其他任何地方,那么我点击的应用程序现在被激活并成为活动窗口。
“最外角”(但是您如何定义?)和单击屏幕中央没有区别。
您有解决方法的想法吗?
我猜你想防止当你的 alpha 值在 1 - 255 之间时,鼠标事件被传递给 destop。
您是否尝试将 MouseListener 添加到框架中?
也许您可以尝试将 a 添加GlassPane
到框架并将 MouseListener 添加到 GlassPane?
推荐阅读
- c# - 二次方程求解器不起作用
- python - 由于我的优化器,我的 Keras 神经网络精度是否总是停留在 ~0.55 左右?
- java - RabbitMQ - 多个消费者单个发布者
- ios - 当我将它用于@IBOutlet 时,iOS UIButton 致命错误
- android - Xamarin Android QR 扫描仪应用程序
- python - Python中的骰子滚轮不是随机的
- ibm-cloud - IBM Bluemix:如果没有现收现付帐户,则无法在该区域创建集群
- r - 参数必须可强制转换为 R 中的非负整数
- python - 如何开始在 python 2.7 中进行并行处理?
- python - 如何创建实时动态更新的无限动画帧?