我遇到了mouseExited和mouseEntered事件的问题。他们没有被执行。我知道这是因为setLayout
。如果我评论它,问题就会消失。这是我的代码:
public class Test{
public static void main(String[] args) {
new Test();
}
public Test() {
JFrame frame = new JFrame();
frame.setContentPane(new Pane());
frame.getContentPane().setBackground(Color.GRAY);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setUndecorated(true);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public class Pane extends JPanel{
public Pane(){
ImageIcon start = new ImageIcon("Start.png");
JLabel bStart = new JLabel(start);
ImageIcon exit = new ImageIcon("Exit.png");
JLabel bExit = new JLabel(exit);
setLayout(new BorderLayout());
add(bStart, BorderLayout.CENTER);
bStart.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
ImageIcon image = new ImageIcon("Start-Pressed.png");
bStart.setIcon(image);
Container parent = bStart.getParent();
parent.remove(bStart);
add(bExit);
parent.revalidate();
parent.repaint();
}
public void mouseEntered(MouseEvent arg0) {
ImageIcon image = new ImageIcon("Start-Hover.png");
bStart.setIcon(image);
}
public void mouseExited(MouseEvent arg0) {
ImageIcon image = new ImageIcon("Start.png");
bStart.setIcon(image);
}
});
bExit.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
System.exit(0);
}
public void mouseEntered(MouseEvent e){
ImageIcon image = new ImageIcon("Exit-Hover.png");
bExit.setIcon(image);
}
public void mouseExited(MouseEvent e){
ImageIcon image = new ImageIcon("Exit.png");
bExit.setIcon(image);
}
});
}
}
}
答案 0 :(得分:2)
我知道这是因为setLayout。如果我评论它,问题就会消失。
我怀疑布局是个问题。如果组件出现,则布局管理器与MouseEvents的生成方式无关。
从您的代码看起来就像您正在尝试提供翻转效果。您可以使用JButton
并为不同的翻转效果设置图标,而不是使用JLabel:
button.setBorderPainted( false );
button.setRolloverEnabled( true );
button.setRolloverIcon( ... );
button.setRolloverSelectedIcon(...);
button.setSelectedIcon(...);
然后就不需要管理MouseListener,因为UI会为你做这件事。
要处理mousePressed,您应该在JButton上使用ActionListener
。有关详细信息,请阅读How to Write an ActionListener上的Swing教程中的部分。