我正在研究java中的Reversi游戏,我正在做的一件事就是如果移动有效,空间的背景颜色会变成绿色。我想通过让玩家将鼠标放在空间上时变为绿色来做到这一点,但是当我从空间中移除鼠标时,我无法弄清楚如何使颜色恢复到默认状态。这是我的代码,它现在将颜色更改为红色:
gameSpacePanel.addMouseMotionListener(new MouseAdapter() {
public void mouseMoved(MouseEvent e) {
gameSpacePanel.setBackground(Color.RED);
}
public void mouseExited(MouseEvent e) {
gameSpacePanel.setBackground(Color.GRAY);
}
});
我尝试了mouseExited方法,但显然这不符合我的想法。有什么建议吗? mouseMoved方法工作正常,我只是不知道如何在删除鼠标时使颜色恢复正常。谢谢!
答案 0 :(得分: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);
}
});
答案 1 :(得分:1)
我刚试过这个并得到与你相同的结果。但后来我意识到你只将MouseAdapter
添加为MouseMotionListener
。您还必须将其添加为MouseListener
,因为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);
}
});
}
}