Получение правильного результата события щелчка мышью - PullRequest
1 голос
/ 06 апреля 2010

Мне любопытно, почему я получил «правильное», НО «неправильное» количество результатов, когда я щелкаю мышью. Я должен был печатать на консоли mouseClicked один раз при каждом щелчке мыши. Однако многие из них распечатывались каждый раз, когда я щелкал мышью ... иногда 5, например

mouseClicked
mouseClicked
mouseClicked
mouseClicked
mouseClicked

Вместо

mouseClicked

Почему?

public class GUI extends JFrame implements MouseListener, ActionListener {
.....
   public GUI {
      GridBagLayout m = new GridBagLayout();
      Container c = getContentPane();
      c.setLayout (m);
      GridBagConstraints con = new GridBagConstraints();
      ....
      JPanel pDraw = new JPanel(new GridLayout(ROWS,COLS,2,2)); 
      con = new GridBagConstraints();
      ...
      m.setConstraints(pDraw, con);

      pDraw.addMouseListener(this);     
      pack();         
      setVisible(true);       
   }

   public void mouseClicked(MouseEvent arg0) {
      System.out.println("mouseClicked");       
   }
}

Ответы [ 3 ]

1 голос
/ 06 апреля 2010

Приведенный вами пример выглядит правильно, и должно работать.

Поскольку вы реализуете интерфейс MouseListener, вы можете проверить, не печатаете ли вы случайно "mouseClicked" в методах mousePressed / mouseReleased.

1 голос
/ 06 апреля 2010

Посмотрите на этот метод в MouseEvent:

getClickCount

public int getClickCount () Возвращает количество щелчков мыши, связанных с этим событием. Возвращает: целое значение для количества кликов

0 голосов
/ 06 апреля 2010

Спасибо за все комментарии, так как я не реализовал все методы mouseEvent, я должен использовать новый mouseAdapter (), чтобы он не смешивался между mousepressed и mouseClicked.

public class GUI extends JFrame implements MouseListener, ActionListener {
.....
   public GUI {
      GridBagLayout m = new GridBagLayout();
      Container c = getContentPane();
      c.setLayout (m);
      GridBagConstraints con = new GridBagConstraints();
      ....
      JPanel pDraw = new JPanel(new GridLayout(ROWS,COLS,2,2)); 
      con = new GridBagConstraints();
      ...
      m.setConstraints(pDraw, con);

      pDraw.addMouseListener(new MouseAdapter(){
         public void mouseClicked(MouseEvent e) { 
            System.out.println("mouseClicked");
         } 
      });

      pack();         
      setVisible(true);       
   }
}
...