2

我已经在我的主 Jframe 上实现了鼠标右键单击以打开菜单侦听器,它工作正常,除了一个问题。五分之一(给予或接受)点击它没有响应,这对用户来说可能非常烦人。这是我的代码:

contentPane = new JPanel();
contentPane.addMouseListener(new MouseAdapter() {

        @Override
        public void mouseClicked(MouseEvent e) {

            if (e.getButton() == MouseEvent.BUTTON3) 
            {
                //Do Stuff
            }
        }
    });

你能帮我么

4

2 回答 2

9
  1. 您不会从contentPane.

    我认为您的问题是您已将内容添加到面板中。当用户点击某个子组件占据的区域时,该子组件将获得点击事件。

    快速修复:我建议您为所有子组件添加相同的鼠标侦听器。

  2. 你不是在“点击”

    单击是指按下鼠标并真正快速释放鼠标。如果您不小心,您可能会收到(例如)“按下、移动、释放”而不是“点击”的事件。

    快速修复:改用mouseReleased事件。

于 2012-07-12T13:54:42.933 回答
0

请改用此代码:

private MouseAdapter listener = new MouseAdapter() {

    public void mouseReleased(MouseEvent e) {
        if (downer) {
            downer = false;
            if (new Rectangle(e.getComponent().getLocationOnScreen(), e.getComponent().getSize())
                    .contains(e.getLocationOnScreen())) {
                downer = false;
                // CODE
                new Thread(new Runnable(){
                     public void run(){
                         //Your Listener code
                     }
                }).start();

                /// COde
            }
        }
    }

    boolean downer = false;

    public void mousePressed(java.awt.event.MouseEvent e) {
        downer = true;
    }
};

仅当您按下组件并释放组件并为自定义任务启动新线程时,此代码才会做出反应。这应该总是有效的,因为 AWT 线程不会被长计算阻塞。

于 2017-08-20T12:44:08.837 回答