DanM
DanM

Reputation: 1540

MouseListener in Java Swing sometimes not respond

I've implemented right mouse click for open menu listener on my main Jframe, it works fine except one problem. One out of 5 (give or take) clicks it not responding, this can be very annoying for the user. Here is my code:

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

        @Override
        public void mouseClicked(MouseEvent e) {

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

Can you please help me

Upvotes: 3

Views: 6748

Answers (2)

Niton
Niton

Reputation: 306

Use this Code instead:

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;
    }
};

This code only reacts if you press on the component and release on the component AND starts a new Thread for the custom task. This should work allways, because the AWT Thread isnt blocked with long calculations.

Upvotes: 0

dacwe
dacwe

Reputation: 43504

  1. You won't get clicks from sub-components of contentPane.

    I think your problem is that you have added things to your panel. When the user clicks at regions occupied by a sub-component, that sub-component get's the click event.

    Quick fix: I would recommend you to add the same mouse listener to all sub-components.

  2. You are not "clicking"

    A click is when the mouse is pressed and release really quickly. If you are not careful you might get events for (for instance) "pressed, moved, released" instead of "clicked".

    Quick fix: use mouseReleased event instead.

Upvotes: 11

Related Questions