Java MouseListener-输入和退出JPanel的事件

Java MouseListener-输入和退出JPanel的事件,java,swing,awt,Java,Swing,Awt,嗨,我对MouseListener和事件有问题 当我有下面的代码时,每个面板都有自己的侦听器,当我进入或退出这个面板时,悬停效果很好 for (int i = 0; i < 5; i++){ for(int j = 0; j < 5; j++){ final JPanel p = new JPanel(); p.addMouseListener(new MouseListener() {

嗨,我对MouseListener和事件有问题

当我有下面的代码时,每个面板都有自己的侦听器,当我进入或退出这个面板时,悬停效果很好

    for (int i = 0; i < 5; i++){
        for(int j = 0; j < 5; j++){
            final JPanel p = new JPanel();
            p.addMouseListener(new MouseListener() {
            public void mouseReleased(MouseEvent e) {}
            public void mousePressed(MouseEvent e) {}
            public void mouseExited(MouseEvent e) {
                p.setBackground( Background );
            }
            public void mouseEntered(MouseEvent e) {
                p.setBackground( Hover );
            }
            public void mouseClicked(MouseEvent e) {}
            });
            p.setOpaque( true );
            p.setBackground( Background );
            p.setPreferredSize( new java.awt.Dimension( 15, 15 ) );
            p.setBorder( BorderFactory.createLineBorder( Border ) );
            Pane.add(p);
        }
    }
for(int i=0;i<5;i++){
对于(int j=0;j<5;j++){
最终JPanel p=新JPanel();
p、 addMouseListener(新MouseListener(){
公共无效MouseEvent e{}
public void mousePressed(MouseEvent e){}
公共无效mouseExited(MouseEvent e){
p、 挫折背景(背景);
}
公共无效鼠标事件(鼠标事件e){
p、 后退地面(悬停);
}
公共无效mouseClicked(MouseEvent e){}
});
p、 set不透明(true);
p、 挫折背景(背景);
p、 setPreferredSize(新的java.awt.Dimension(15,15));
p、 setboorder(BorderFactory.createLineBorder(Border));
窗格.添加(p);
}
}
但是,当我编写自己的类并在这个新类中实现JPanel和侦听器时,只有最后一个面板是triggert。问题在哪里

Main Class
for (int i = 0; i < 5; i++){
    for(int j = 0; j < 5; j++){
            final Pad p = new Pad();
            Pane.add(p.getContent());
     }
 }
 ...

public class Pad{  
private static  JPanel p; 
public Pad(Color Back, Color Hov, Color Bord,String name){
     ...
     p = new JPanel();
     p.addMouseListener(new MouseListener() {
                public void mouseReleased(MouseEvent e) {}
                public void mousePressed(MouseEvent e) {}
                public void mouseExited(MouseEvent e) {
                    p.setBackground( Background );
                }
                public void mouseEntered(MouseEvent e) {
                    p.setBackground( Hover );
                }
                public void mouseClicked(MouseEvent e) {}
                });
            p.setOpaque( true );
            p.setBackground( Background );
            p.setPreferredSize( new java.awt.Dimension( 15, 15 ) );
            p.setBorder( BorderFactory.createLineBorder( Border ) );
}
public static Container getContent(){
       return p;
}
Main类
对于(int i=0;i<5;i++){
对于(int j=0;j<5;j++){
最终焊盘p=新焊盘();
添加(p.getContent());
}
}
...
公共类Pad{
私有静态JPanel p;
公用键盘(彩色背面、彩色Hov、彩色边框、字符串名称){
...
p=新的JPanel();
p、 addMouseListener(新MouseListener(){
公共无效MouseEvent e{}
public void mousePressed(MouseEvent e){}
公共无效mouseExited(MouseEvent e){
p、 挫折背景(背景);
}
公共无效鼠标事件(鼠标事件e){
p、 后退地面(悬停);
}
公共无效mouseClicked(MouseEvent e){}
});
p、 set不透明(true);
p、 挫折背景(背景);
p、 setPreferredSize(新的java.awt.Dimension(15,15));
p、 setboorder(BorderFactory.createLineBorder(Border));
}
公共静态容器getContent(){
返回p;
}

问题在于,您对
JPanel
p
有一个
静态的
引用……这意味着分配给
p
的最后一个
JPanel
将可供
鼠标侦听器的所有实例访问

private static  JPanel p; 
public Pad(Color Back, Color Hov, Color Bord,String name){
     p = new JPanel();
相反,尝试一些更像

private JPanel p; 
public Pad(Color Back, Color Hov, Color Bord,String name){
     p = new JPanel();
甚至

public void mouseExited(MouseEvent e) {
    e.getComponent().setBackground( Background );
}
public void mouseEntered(MouseEvent e) {
    e.getComponent().setBackground( Hover );
}
但是,我还是要去掉
静态的
引用