@坦克大战项目2
任务2:向对战界面添加监听
在完成了对战界面以后,我们还需要向其中添加监听,使之能够运行。 作为一个界面,需要布局,在这里强调一下,在点击开始按钮后,就开始出现我们的作战界面,这个作战界面我们需要用到卡片布局。
卡片布局的设置如下:
//设置卡片布局
JPanel JPKaiShi = new JPanel();
JPKaiShi.setLayout(new FlowLayout(FlowLayout.CENTER));
JL1 = new JLabel("stage:1");
JPKaiShi.add(JL1);
CardLayout card = new CardLayout();
JPanel center = new JPanel(card);
this.getContentPane().add(center);
center.add("qishiyemian",JPKaiShi);
KaiShi youxi = new KaiShi();
new Thread(youxi).start();//启动坦克发射子弹的这个线程
center.add("game",youxi);
card.show(center, "qishiyemian"); //初始状态显示为;stage:1
如下图所示:
/**/向菜单中添加监听**
KaiShi = new JMenuItem("开始(S)");//主菜单中菜单项的下拉表中的选项
KaiShi.setMnemonic(KeyEvent.VK_S);//键盘注记符
KaiShi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
KaiShi.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
card.show(center, "game"); //卡片布局
}
});
TuiChu = new JMenuItem("退出(E)");
TuiChu.setMnemonic(KeyEvent.VK_E);//键盘注记符
TuiChu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,InputEvent.CTRL_MASK));
//将快捷方式设置为ctrl+e
TuiChu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
System.exit(0);
}
});
添加完成监听后,再点击开始或者快捷方式启动开始时,会出现以下界面:(上述代码中因为含有了坦克对象类,所以在界面中出现了绘制的坦克,在后续中会单独说明坦克对象类的创建及其坦克的绘制。)
下为添加了监听的主界面的大体写法。
public class MenuDemoTank extends JFrame{
JMenu YouXi,SheZhi,BangZhu;
JMenuItem KaiShi,TuiChu;
JMenuBar zhucaidan;
JSeparator fengexian ;
JLabel JL1;
public MenuDemoTank() {
zhucaidan = new JMenuBar();//主菜单
YouXi = new JMenu("游戏(G)");//主菜单中的菜单项
YouXi.setMnemonic(KeyEvent.VK_G);
SheZhi = new JMenu("设置(T)");
SheZhi.setMnemonic(KeyEvent.VK_T);
BangZhu = new JMenu("帮助(P)");
BangZhu.setMnemonic(KeyEvent.VK_P);
//设置卡片布局
JPanel JPKaiShi = new JPanel();
JPKaiShi.setLayout(new FlowLayout(FlowLayout.CENTER));
JL1 = new JLabel("stage:1");
JPKaiShi.add(JL1);
CardLayout card = new CardLayout();
JPanel center = new JPanel(card);
this.getContentPane().add(center);
center.add("qishiyemian",JPKaiShi);
KaiShi youxi = new KaiShi();
center.add("game",youxi);
card.show(center, "qishiyemian");
KaiShi = new JMenuItem("开始(S)");//主菜单中菜单项的下拉表中的选项
KaiShi.setMnemonic(KeyEvent.VK_S);
KaiShi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
KaiShi.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
card.show(center, "game");
}
});
TuiChu = new JMenuItem("退出(E)");
TuiChu.setMnemonic(KeyEvent.VK_E);
TuiChu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,InputEvent.CTRL_MASK));
//将快捷方式设置为ctrl+e
TuiChu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
System.exit(0);
}
});
YouXi.add(KaiShi);
YouXi.add(TuiChu);
zhucaidan.add(YouXi);
zhucaidan.add(SheZhi);
zhucaidan.add(BangZhu);
this.setJMenuBar(zhucaidan);
this.addKeyListener(youxi);//键盘监听要添加到JFrame中,不能添加到JPanel中,所以在主界面上添加监听,在游戏开始面板上写监听的方法
this.setBounds(300,300,600,600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
坦克大战主界面及其监听大体完成。