Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPanel不监听鼠标捕捉器_Java_Jpanel_Mouselistener - Fatal编程技术网

Java JPanel不监听鼠标捕捉器

Java JPanel不监听鼠标捕捉器,java,jpanel,mouselistener,Java,Jpanel,Mouselistener,我有这个问题。我得做一个益智游戏。这有一个主JPanel(PPal),它有一个BorderLAyout。在北部有另一个JPanel(PPiezas),上面有拼图的各个部分。我有两个鼠标事件,一个(ClickSobrePieza)是通过点击工件面板来选择工件 这个没问题。然后我将另一个鼠标事件(RatonMueve)添加到主面板中,该事件用于侦听每一个鼠标运动,如果有选定的块,则在移动鼠标时将其移动到主面板上。这里的问题是这个事件不起作用。它甚至没有输入代码。我在PPal面板上尝试了setFocu

我有这个问题。我得做一个益智游戏。这有一个主JPanel(PPal),它有一个BorderLAyout。在北部有另一个JPanel(PPiezas),上面有拼图的各个部分。我有两个鼠标事件,一个(ClickSobrePieza)是通过点击工件面板来选择工件

这个没问题。然后我将另一个鼠标事件(RatonMueve)添加到主面板中,该事件用于侦听每一个鼠标运动,如果有选定的块,则在移动鼠标时将其移动到主面板上。这里的问题是这个事件不起作用。它甚至没有输入代码。我在PPal面板上尝试了setFocusable()和requestFocusable(),但没有效果。有人知道为什么会这样吗

package GUI;

import data.Pieza;
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.ImageIcon;
import javax.swing.JLayeredPane;
import javax.swing.event.MouseInputAdapter;

/**
*
 * @author rootmobil
 */
public class PPal extends JLayeredPane{
private VPal v;//that's JFrame, it contains this panel
private PPiezas pPiezas;//thats the JPanel in the NORTH
private PHuecos pHuecos;//that's a JPanel in CENTRE
private Pieza piezaMostrada;//that's the piece should be showed and moved, It's the piece user choose
private Point p;//that's the point that will contain the mouse pointer position and will mark where must be piezaMostrada each time
        
public PPal(VPal v) {
    this.v=v;
    
    this.setFocusable(true);
    this.requestFocus();
    this.addMouseMotionListener(new RatonMueve());
    
    this.setLayout(new BorderLayout());
    
    this.pPiezas=new PPiezas(v);
    this.pHuecos=new PHuecos(v);
    
    this.moveToBack(this.pPiezas);
    this.moveToBack(this.pHuecos);
    
    this.pPiezas.addMouseListener(new ClickSobrePieza());
    this.add(pPiezas,BorderLayout.NORTH,1);
    this.add(new PHuecos(v),BorderLayout.CENTER,1);
 
}

   class RatonMueve extends MouseInputAdapter{
    @Override
    public void mouseEntered(MouseEvent e) {
        System.out.println("algo");//I put that to see if program enter into this code, it never does
        if (v.getJuego().getPiezaAMostrar()!=null) {
            piezaMostrada=new Pieza(v.getJuego().getPiezaAMostrar().getImgPath(),v.getJuego().getPiezaAMostrar().getPosicion());//that creates piezaMostrada from the selected one in the north panel
            PPal.this.moveToFront(piezaMostrada);
            piezaMostrada.setLocation(p.x,p.y);
            PPal.this.add(piezaMostrada);
        }
        
    }
    @Override
    public void mouseMoved(MouseEvent e) {
        p=new Point(e.getX(),e.getY());
        if (piezaMostrada!=null) {
            piezaMostrada.setLocation(p.x,p.y);
            PPal.this.repaint();
        }
    }
}

   //this is where I take the selected piece by the user, this code works perfect
   class ClickSobrePieza extends MouseAdapter{
    Point p;

    @Override
    public void mouseClicked(MouseEvent e) {
        super.mouseClicked(e);
        p=e.getPoint();
        
        if (e.getComponent().getComponentAt(p).getClass()==Pieza.class){
            if (v.getJuego().getPiezaSeleccionada()!=null) {
               v.getJuego().getPiezaSeleccionada().setEnabled(true); 
            }
            v.getJuego().setPiezaSeleccionada((Pieza)e.getComponent().getComponentAt(p));
            v.getJuego().setPiezaAMostrar(new Pieza(v.getJuego().getPiezaSeleccionada().getImgPath(),
                                                        v.getJuego().getPiezaSeleccionada().getPosicion()));
            
            v.getJuego().getPiezaSeleccionada().setEnabled(false);
        }
    }
    
    
}

   //draws a background image 
   @Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawImage(new ImageIcon("./res/fondo.jpg").getImage(),0,0,this.getWidth(),this.getHeight(),null);
}

}//:)

尝试使用
class RatonMueve extensed MouseAdapter
谢谢您的回答。它不起作用,尽管你的符号很混乱