Java MouseMotionListener
我正在用java开发一个Reversi游戏,我正在做的一件事是,如果移动有效,则使空间的背景色变为绿色。我想在玩家将鼠标放在空间上时使其变为绿色,但我很难弄清楚当鼠标从空间中移除时,如何使颜色恢复为默认颜色。这是我的代码,它现在将颜色更改为红色:Java MouseMotionListener,java,swing,mousemotionlistener,Java,Swing,Mousemotionlistener,我正在用java开发一个Reversi游戏,我正在做的一件事是,如果移动有效,则使空间的背景色变为绿色。我想在玩家将鼠标放在空间上时使其变为绿色,但我很难弄清楚当鼠标从空间中移除时,如何使颜色恢复为默认颜色。这是我的代码,它现在将颜色更改为红色: gameSpacePanel.addMouseMotionListener(new MouseAdapter() { public void mouseMoved(MouseEvent e) {
gameSpacePanel.addMouseMotionListener(new MouseAdapter() {
public void mouseMoved(MouseEvent e) {
gameSpacePanel.setBackground(Color.RED);
}
public void mouseExited(MouseEvent e) {
gameSpacePanel.setBackground(Color.GRAY);
}
});
我尝试了mouseExited方法,但显然没有达到我认为的效果。有什么建议吗?mouseMoved方法工作得很好,我只是不知道如何在移除鼠标后使颜色恢复正常。谢谢 我刚试过这个,结果和你一样。但后来我意识到,您只添加了
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);
}
});
}
}
每次鼠标移动都会触发
MouseMove
事件。如果我错了,请纠正我,您希望鼠标在进入时更改颜色,并在退出时更改回默认颜色吗?首先MouseMotionListener
没有mouseExited
方法,而是使用mouseelistener
,然后替换
void mouseMoved(MouseEvent e)
与
它应该是这样的:
gameSpacePanel.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent e) {
gameSpacePanel.setBackground(Color.RED);
}
public void mouseExited(MouseEvent e) {
gameSpacePanel.setBackground(Color.GRAY);
}
});
如果没有SSCCE/MCVE,此表单中的问题是不可回答的,简短的、可运行的、可编译的、带有颜色的基本鼠标事件适合我,问题可能与JLabel有关
gameSpacePanel.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent e) {
gameSpacePanel.setBackground(Color.RED);
}
public void mouseExited(MouseEvent e) {
gameSpacePanel.setBackground(Color.GRAY);
}
});