【问题标题】:Need Multiple JPanel's to respond its own mouse click events需要多个 JPanel 来响应自己的鼠标点击事件
【发布时间】:2010-09-20 20:47:30
【问题描述】:

我的应用程序上有多个 JPanel,但是我不知道如何检测到底点击了哪一个。

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

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


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

【问题讨论】:

  • 我完全忘了接受我以前的答案 =) 感谢您的提醒。

标签: java mouseevent jpanel


【解决方案1】:

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

Square square1 = new Square("1"); 

应该是:

square1 = new Square("1"); 

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这是我的代码的缩短版本,我实际上在 1 个 JFrame 上有 16 个 JPanel。听起来很奇怪,但这是项目要求。
    猜你喜欢
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多