2

こんにちは、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);
        }
    }

しかし、独自のクラスを作成し、この新しいクラスに JPanel とリスナーを実装すると、最後のパネルのみがトリガーされます。問題はどこだ?

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;
}
4

1 に答える 1

5

問題は、...staticへの参照があることJPanel pです。これは、最後JPanelに割り当てられた...pのすべてのインスタンスにアクセスできることを意味します。MouseListener

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 );
}

しかし、私はまだstatic参照を取り除きます。

于 2013-08-09T09:37:03.397 に答える