为什么选择这个项目?
1.好玩,有趣
2.涉及到java基础的各个方面的技术:
面向对象思想、多线程、IO、绘图技术、监听事件、数据库、界面编程
3.巩固旧的知识
一:准备工作
黑色框为JFrame 红色框为JPanel ,由于JFrame不提供画图方法,所以我们只能在JPanel里画图,最后把JPanel放到JFrame中。
![](https://img-blog.csdn.net/20160816215052571)
paintComponent(g)在以下情况被调用:
1.窗口最小化,再最大化
2.窗口的大小发生变化
3.repaint函数被调用
public void paintComponent(Graphics g){
// 调用父类(套路)函数 完成初始化任务 这句话不能少
super.paintComponent(g);
g.drawOval(10, 10,30, 30);
坦克类:
-
- class Tank {
- int x = 0;
- int y = 0;
- public Tank (int x,int y){
- this.x = x;
- this.y = y;
- }
- public int getX() {
- return x;
- }
- public void setX(int x) {
- this.x = x;
- }
- public int getY() {
- return y;
- }
- public void setY(int y) {
- this.y = y;
- }
- }
-
- class Hero extends Tank{
- public Hero(int x,int y){
- super(x, y);
- }
- }
面板:
/*
* drawTank (坦克坐标x,y,画笔g,方向,坦克类型)
* 方法介绍:
* 可以设置-->坦克的颜色(类型:敌方坦克,我方坦克),方向,出现的坐标
*
* 如果type是default 则默认颜色为画出黑色坦克
*
* 封装性:将坦克封装到方法中。
*
*/
-
- @SuppressWarnings("serial")
- class MyPanel extends JPanel{
-
- Hero hero = null;
-
-
- public MyPanel(){
- hero = new Hero(10,10);
- }
-
-
- public void paintComponent(Graphics g){
- super.paintComponent(g);
-
- g.fillRect(0, 0, 400, 300);
-
-
- drawTank(hero.getX(),hero.getY(),g,0,0);
- g.setColor(Color.yellow);
-
- }
-
-
-
-
-
-
-
-
-
-
-
-
- public void drawTank(int x,int y,Graphics g,int direct,int type){
- switch (type) {
- case 0:
- g.setColor(Color.cyan);
- break;
- case 1:
- g.setColor(Color.yellow);
- default:
- break;
- }
- switch (direct) {
- case 0:
-
- g.fill3DRect(x , y , 5 , 30, false);
- g.fill3DRect(x+15, y , 5 , 30, false);
- g.fill3DRect(x+5 , y+5 , 10, 20, false);
- g.fillOval(x+4, y+10, 10 , 10);
- g.drawLine(x+9, y+15, x+9, y );
- break;
-
- default:
- break;
- }
- }
- }
主函数:
-
-
-
-
-
- package com.test1;
-
- import java.awt.Color;
- import java.awt.Graphics;
-
- import javax.swing.JFrame;
- import javax.swing.JPanel;
-
- @SuppressWarnings("serial")
- public class MyTankGame1 extends JFrame{
-
- MyPanel p1 = new MyPanel();
-
-
- public MyTankGame1(){
- add(p1);
- setSize(400, 300);
- setVisible(true);
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- }
-
-
- public static void main(String[] args) {
- new MyTankGame1();
- }
- }