1

我正在用java开发一个黑白棋游戏,我正在做的一件事就是让它在移动有效的情况下使空间的背景颜色变为绿色。我想通过在玩家将鼠标放在空间上时让它变成绿色来做到这一点,但是当鼠标从空间中移出时,我无法弄清楚如何使颜色恢复为默认值。这是我的代码,它现在将颜色更改为红色:

gameSpacePanel.addMouseMotionListener(new MouseAdapter() {
            public void mouseMoved(MouseEvent e) {
                gameSpacePanel.setBackground(Color.RED);
            }
            public void mouseExited(MouseEvent e) {
                gameSpacePanel.setBackground(Color.GRAY);
            }
        });

我尝试了 mouseExited 方法,但显然这并没有达到我的预期。有什么建议吗?mouseMoved 方法工作正常,我只是不知道如何在移除鼠标后使颜色恢复正常。谢谢!

4

2 回答 2

2

每次鼠标移动都会触发一个MouseMove事件。如果我错了,请纠正我,您希望鼠标在进入时更改颜色并在退出时更改回默认颜色?首先MouseMotionListener没有mouseExited方法,而是使用MouseListener,然后替换

void mouseMoved(MouseEvent e) 

void mouseEntered(MouseEvent e) 

它应该看起来像这样:

gameSpacePanel.addMouseListener(new MouseAdapter() {
            public void mouseEntered(MouseEvent e) {
                gameSpacePanel.setBackground(Color.RED);
            }
            public void mouseExited(MouseEvent e) {
                gameSpacePanel.setBackground(Color.GRAY);
            }
        });
于 2015-03-27T19:31:00.170 回答
1

我刚试过这个,结果和你一样。但后来我意识到你只添加了MouseAdapteras MouseMotionListener。您还必须将其添加为 a MouseListenertoo,因为mouseExited()它是该接口mouseMoved()的一部分,而MouseMotionListener.

这是一个有效的简短程序:

import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Test {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame frame = new JFrame();
                final JPanel panel = new JPanel();
                MouseAdapter mouseAdapter = new MouseAdapter() {
                    public void mouseMoved(MouseEvent e) {
                        panel.setBackground(Color.RED);
                    }
                    public void mouseExited(MouseEvent e) {
                        panel.setBackground(Color.GRAY);
                        panel.repaint();
                    }
                };
                panel.addMouseListener(mouseAdapter);
                panel.addMouseMotionListener(mouseAdapter);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setContentPane(panel);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}
于 2015-03-27T19:23:22.247 回答