首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要多个JPanel来响应自己的鼠标点击事件

需要多个JPanel来响应自己的鼠标点击事件
EN

Stack Overflow用户
提问于 2010-09-21 04:47:31
回答 2查看 1.5K关注 0票数 0

我的应用程序上有多个JPanels,但是我不知道如何准确地检测哪一个被点击了。

在我的MouseListener中,我有参数e,但是我的方法不起作用

在我的代码早期,我声明了多个JPanels和一个侦听器对象。

代码语言:javascript
复制
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);

class PuzzleListener implements MouseListener
    {

 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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-21 05:07:37

问题似乎是每个正方形面板都有一个类变量和一个局部变量。

代码语言:javascript
复制
Square square1 = new Square("1"); 

应该是:

代码语言:javascript
复制
square1 = new Square("1"); 

现在,您将只有一个PuzzleListener可以引用的类变量。

票数 1
EN

Stack Overflow用户

发布于 2010-09-21 05:30:24

是否需要使用单个MouseListener?您可以创建PuzzleListener的新实例并将其添加到每个JPanel。这样就不会混淆哪个面板上的哪个监听器被解雇了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3755363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档