嗨,我有一个MouseListener和事件的问题.
当我有以下代码时,每个Panel都有自己的监听器,当我进入或退出此面板时,悬停效果工作正常.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我编写一个自己的类并在这个新类中实现JPanel和Listener时,只有最后一个面板是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;
}
Run Code Online (Sandbox Code Playgroud)
问题是你有一个static引用JPanel p...这意味着,最后JPanel分配p给所有实例的MouseListener....
private static JPanel p;
public Pad(Color Back, Color Hov, Color Bord,String name){
p = new JPanel();
Run Code Online (Sandbox Code Playgroud)
相反,尝试更像......
private JPanel p;
public Pad(Color Back, Color Hov, Color Bord,String name){
p = new JPanel();
Run Code Online (Sandbox Code Playgroud)
甚至
public void mouseExited(MouseEvent e) {
e.getComponent().setBackground( Background );
}
public void mouseEntered(MouseEvent e) {
e.getComponent().setBackground( Hover );
}
Run Code Online (Sandbox Code Playgroud)
但是,我仍然摆脱了static参考.