Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Glass痛苦(那不是打字错误)_Java_Swing_Listener_Glasspane - Fatal编程技术网

Java Glass痛苦(那不是打字错误)

Java Glass痛苦(那不是打字错误),java,swing,listener,glasspane,Java,Swing,Listener,Glasspane,我先遇到了一个不同的问题,所以我发了这个帖子: 答案让我想到了java玻璃窗格。我看到其他关于这一点的帖子,它们都指向这篇文章: 我使用了文章中的示例(FinalClassPane.java),并将其设置为与测试应用程序中的完全相同: GlassPane glass = new GlassPane(this); getRootPane().setGlassPane(glass); GestureListener gl = new GestureListener(); glass.addMou

我先遇到了一个不同的问题,所以我发了这个帖子:

答案让我想到了java玻璃窗格。我看到其他关于这一点的帖子,它们都指向这篇文章:

我使用了文章中的示例(FinalClassPane.java),并将其设置为与测试应用程序中的完全相同:

GlassPane glass = new GlassPane(this);
getRootPane().setGlassPane(glass);
GestureListener gl = new GestureListener();
glass.addMouseMotionListener(gl);
glass.addMouseListener(gl);
glass.setVisible(true);
if (glass instanceof AWTEventListener) {
    AWTEventListener al = (AWTEventListener) glass;
    Toolkit.getDefaultToolkit().addAWTEventListener(al,
            AWTEvent.MOUSE_MOTION_EVENT_MASK | AWTEvent.MOUSE_EVENT_MASK);
}
但我仍然有同样的问题,玻璃使我无法点击它下面的任何按钮(JButton)

如果您阅读了我最初的SO问题,认为glassPane不适合我,请给我发一个替代解决方案,否则请告诉我为什么这不起作用

提前谢谢

编辑:当我添加自己的鼠标听写器时,它工作但停止工作

请注意,在我的代码中,我添加了自己的
手势监听器
,我无法将自己的鼠标监听器添加到此实现中-这就是它无法工作的原因。我把那些线取下来,玻璃窗现在可以正常工作了

在代码(FinalGlassPane.java)中有一个关于MouseStener的通知,我不太理解,所以我的新问题是如何将我自己的MouseStener添加到这个玻璃窗格中

/**
 * If someone adds a mouseListener to the GlassPane or set a new cursor
 * we expect that he knows what he is doing
 * and return the super.contains(x, y)
 * otherwise we return false to respect the cursors
 * for the underneath components
 */
@Override
public boolean contains(int x, int y) {
    if (getMouseListeners().length == 0 && getMouseMotionListeners().length == 0
            && getMouseWheelListeners().length == 0
            && getCursor() == Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)) {
        return false;
    }
    return super.contains(x, y);
}
其他信息:

如果我总是在
contains(int,int)
方法中返回false,那么按钮总是工作的,但是我在玻璃窗格上的鼠标侦听器却不工作。如果我总是返回“super.contains(x,y)”,则会出现相反的情况:玻璃窗格上的MouseStener可以工作,但我不能单击下面的任何组件

最终编辑 因此我得出结论,我不能(或没有)一种方法(使用Java 6)允许我的应用程序有两个层,可以同时接收MouseListener事件(mousePressed、MouseRelease)。最后,我在我的原始问题上使用了解决方案,即创建一个自定义JButton,并让它将MouseListener添加到每个实例。

请参阅Java教程中的“如何使用根窗格”,搜索单词“redispatches”(大约向下一页),这是一个与您试图通过复选框实现的目标类似的示例:


简而言之,在翻译鼠标光标的位置时,您需要使用
SwingUtilities.GetDeepTestComponentAT(..)
Component.dispatchEvent(..)

如果您确实需要convertXxx或getXxx方法,这两个问题都不清楚

1) 您可以将
JLabel
(调度鼠标事件)放置到
玻璃窗格
,此
JLabel
可以从
JFrame
放置/覆盖整个可用的
矩形
,或者只需要
边界

2) 您可以将
JLabel
(调度鼠标事件)放置到
JViewport
,此
JLabel
可以放置/覆盖
JScrollPane/JViewport
中的整个可用
矩形,或者只需要
边界

3) 您可以使用
JLayeredPane
(最多6层)


4) 您可以使用基于
JXLayer
JLayer
(Java7)(对于Java6,可能是更好的选择)

您可以使用glass(痛苦)的想法为所有按钮添加一个主侦听器吗?这会给您的应用程序带来问题吗?实际上在我的应用程序中是这样的,因为按钮(按钮的网格)是从XML文件生成的,有时是从用户对象生成的。将监听器添加到每一个按钮都是一件非常痛苦的事情,我甚至不确定我的监听器是否能正常工作。@ChuckFricano有什么建议吗?是的。但是首先,你觉得用自定义按钮组件代替swing按钮怎么样?我会在你的另一个问题上发布自定义按钮。谢谢你的回答。该方法的问题是组件需要传递到玻璃窗格中(通过构造函数)——我不能这样做。更糟糕的是,玻璃窗格随后向该组件添加了一个特殊的侦听器。如果我想添加单独的侦听器,我会在没有玻璃面板的情况下完成@ChrisWhiteOk,这篇文章并没有完全解决你的问题,但它是我在pastebin上为你详细介绍的基础:哦,你太好了,谢谢。实际上,添加MouseMotionListener并不是玻璃窗格的问题;问题是当我添加我自己的MouseListener以获得mousePressed和MouseRelease事件时。如果你看到我添加到这个问题中的“附加信息”,它与这个contains(x,y)方法有关。我可以将其设置为侦听下面的组件,也可以通过更改返回值将其设置为侦听glassPane。这就是为什么我最终决定在我的原始问题中使用这个答案——一个自定义的JButton,可以自动将侦听器添加到每个实例中。所以我可以使用一个JLayeredPane而不是JPanel作为我的GlassPane,这样就可以完成任务了@mKorbelI不知道你真正需要什么,你真正的工作是什么:-),请不要攻击你的人--->我在那里读到了大量的广泛问题,没有根据,真正的答案离问题太远,我的补充问题,你想消费()鼠标事件(GlassPane不保护KeyEvents),或者你们可以重新发布活动,或者???我正在尝试为触摸屏PC系统做一些东西,但像android/iphone一样,它有手势功能。我制作了我的手势监听器(你可以在我的回答中看到:),所以我想在我的应用程序框架上有一个手势层,但允许我像往常一样使用下面的所有jbutton和其他组件。不管怎样最好,我不知道,我还是个新手。顺便说一句,谢谢你的帮助。我想我已经在重新发布事件(使用Suns class中的Alex)@user1031312 ahaaa你的意思是(可能是Android手机中的愚蠢例子)解锁锁定手机时的漂亮动画吗???是的!在android/iphone菜单中还有另一个例子:左/右滑动以显示下一个/上一个菜单。但动画不是我的问题,动画是