Нужно несколько JPanel для ответа на собственные события щелчка мышью - PullRequest
0 голосов
/ 21 сентября 2010

У меня есть несколько JPanels в моем приложении, однако я не могу понять, как определить, какой именно из которых был нажат.

В моем MouseListener у меня есть аргумент e, но мой метод не работает

В начале моего кода я объявляю несколько JPanels и объект слушателя.


PuzzleListener plist = new PuzzleListener();
JPanel puzzle_board = new JPanel(new GridLayout(4,4,5,5));
...
Square square1 = new Square("1");
Square square2 = new Square("2");
...
puzzle_board.add(square1);
puzzle_board.add(square2);
...
square1.addMouseListener(plist);
square1.addMouseListener(plist);</p>

<p>class PuzzleListener implements MouseListener
    {</p>

 public void mouseClicked(MouseEvent e)
 {
       JPanel pnlClick = (JPanel)(e.getSource());
       //System.out.println(pnlClick);
  //System.out.println(e.getSource());
  //System.out.println(e.getComponent().getClass());
  //System.out.println(e.getComponent().getClass().getName());


            //problem is here

  if(pnlClick == square1)
  {
   System.out.println("Panel 1 has been clicked");
  }    
            if(pnlClick == square2)
  {
   System.out.println("Panel 2 has been clicked");
  }       
 }
 public void mouseExited(MouseEvent e)
 {
 }
 public void mouseEntered(MouseEvent e)
 { 
  //System.out.println("Panel 1 has been clicked");
 }
 public void mouseReleased(MouseEvent e)
 {
 }
 public void mousePressed(MouseEvent e)
 {

 }
 /*
 public void actionPerformed(ActionEvent e)
 {
  JPanel pnlClick = (JPanel)(e.getSource());
 }*/

}//end calcListener

Ответы [ 2 ]

1 голос
/ 21 сентября 2010

Возможно, проблема в том, что у вас есть переменная класса и локальная переменная для каждой из ваших квадратных панелей.

Square square1 = new Square("1"); 

должно быть:

square1 = new Square("1"); 

теперь вы будетеесть только переменная класса, на которую может ссылаться PuzzleListener.

0 голосов
/ 21 сентября 2010

Есть ли необходимость использовать один MouseListener? Вы можете создать новый экземпляр вашего PuzzleListener и добавить его к каждому JPanel. Таким образом, не возникает путаницы в том, какой слушатель на какой панели увольняется.

...