我正在尝试创建一个JFrame
,为我的游戏注册MouseEvents
。但是,运行以下代码时,控制台仅在拖动框架边框时打印“in”和“out”,然后移动光标。很混乱。我尝试添加组件glassPane
,然后在那里添加MouseListener
,但它仍然不成功。
import java.awt.Dimension;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
public class Window extends JFrame implements MouseListener {
private static final long serialVersionUID = -240840600533728354L;
public Window(int width, int height, String title, Game game) {
JFrame frame = new JFrame(title);
frame.setPreferredSize(new Dimension(width, height));
frame.setSize(new Dimension(width, height));
frame.setMaximumSize(new Dimension(width, height));
frame.setMinimumSize(new Dimension(width, height));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.add(game);
frame.setVisible(true);
frame.addMouseListener(this);
game.start();
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("out");
}
@Override
public void mouseClicked(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
}
答案 0 :(得分:2)
我认为你要做的最后一件事是将MouseListener添加到JFrame,因为JFrame不应该承担这个责任。它的责任应该是保持并显示添加到它的组件,它可能是那些组件之一,可能是显示游戏活动视图的组件,很可能是JPanel,应该是得到这个MouseListener。
一些旁注:
this
对象,所以另一个(并且更强)的理由不让这个类扩展JFrame。getPreferredSize()
方法指定自己的大小,然后让JFrame通过在添加所有内容后调用JFrame 上的pack()
来实现此目的它的组成部分。答案 1 :(得分:2)
将MouseListener
添加到Game
(实际上需要鼠标事件)而不是JFrame
(它没有,并且添加了框架装饰的并发症/边界)。