我们使用鼠标点击哪里飞机在哪里的移动方式,为了得到鼠标的输入,我们需要使用java中的事件监听的包。
我们新建一个包起名为listener, 在此包下新建一个类起名FrameMouseListener
java中不能多继承,为了解决多继承,可以使用接口。导入相关的包
public class FrameMouseListener implements MouseListener {
}
我们要使用到baseFrame 上的myPanel 中的 player ,所以新建一个baseFrame对象,
public BaseFrame baseFrame;
在接口中我们重写实现mouseClicked()方法
package lisener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import view.BaseFrame;
public class FrameMouseListener implements MouseListener {
public BaseFrame baseFrame;
@Override
public void mouseClicked(MouseEvent e) {
// TODO 自动生成的方法存根
this.baseFrame.myPanel.player.x = e.getX() - this.baseFrame.myPanel.player.width / 2;
this.baseFrame.myPanel.player.y = e.getY() - this.baseFrame.myPanel.player.height / 2;
}
@Override
public void mousePressed(MouseEvent e) {
// TODO 自动生成的方法存根
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO 自动生成的方法存根
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO 自动生成的方法存根
}
@Override
public void mouseExited(MouseEvent e) {
// TODO 自动生成的方法存根
}
}
然后我们要去BaseFrame中新建一个FrameMouseListener对象,把当前BaseFrame传给FrameMouseListener。 最后激活事件。
为了代码便与维护,我们把这部分重构成一个函数。
public FrameMouseListener frameMouseListener;
public void setTouchListener()
{
this.frameMouseListener = new FrameMouseListener();
this.frameMouseListener.baseFrame = this;
this.addMouseListener(this.frameMouseListener);
}
将函数放在添加面板下面即可。
package view;
import javax.swing.JFrame;
import lisener.FrameMouseListener;
public class BaseFrame extends JFrame{
public static int frameWidth = 512,
frameHeight = 768;
public MyPanel myPanel;
public FrameMouseListener frameMouseListener;
public void setTouchListener()
{
this.frameMouseListener = new FrameMouseListener();
this.frameMouseListener.baseFrame = this;
this.addMouseListener(this.frameMouseListener);
}
public BaseFrame()
{
super("飞机大战");
setBounds(100, 0, frameWidth, frameHeight);
setLayout(null);
this.myPanel = new MyPanel();
this.myPanel.setBounds(0,0,frameWidth, frameHeight);
this.add(this.myPanel);
setTouchListener();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}