通过定义一个继承Jpanel的panel来绘制图形:
package tank;
/*
*
*
* java绘图原理
*/
import java.awt.*;
import javax.swing.*;
public class test1 extends JFrame{
Mypanle mp;
public static void main(String[] args) {
// TODO Auto-generated method stub
test1 test = new test1();
}
public test1() {
mp = new Mypanle();
this.add(mp);
this.setSize(300, 300);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
//定义一个mypanel 自己的面板用于绘图和显示绘图的区域
class Mypanle extends JPanel{
// jpanel 的paint方法
// Graphics 是绘图的重要类,可以理解为一只画笔;
public void paint(Graphics g) {
//调用父类 函数,完成初始化任务;不可少
super.paint(g);
//画一个圆,前面两个是位置 后面是宽度和高度;
/*g.drawOval(5, 100, 20, 20);
//画直线
g.drawLine(10, 10, 40, 40);
//画矩形边框
g.drawRect(10, 10, 40, 60);
//设置颜色
g.setColor(Color.BLUE);
//填充矩形
g.fillRect(100, 100, 40, 40);*/
/*//在面板上画图片;
Image im = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/1.jpg"));
//显示
g.drawImage(im, 90, 90, 200, 150, this);*/
//画字
/*g.setColor(Color.orange);
g.setFont(new Font("华文彩云", Font.BOLD, 50));
g.drawString("thank you!", 100, 100);*/
}
}
绘制一个坦克:
package tank;
import javax.swing.JFrame;
/*
*
*
* 坦克游戏1.0
画出坦克
*/
import java.awt.*;
import javax.swing.*;
public class tank_1 extends JFrame{
mypane mp = null;
public static void main(String[] args) {
// TODO Auto-generated method stub
tank_1 tk = new tank_1();
}
public tank_1(){
mp = new mypane();
this.add(mp);
this.setSize(400,300);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
// 我的面板
class mypane extends JPanel{
//定义一个我的坦克
Helo hero = null;
//构造函数
public mypane() {
hero = new Helo(10, 10);
}
//重新paint
public void paint(Graphics g) {
super.paint(g);
//填充背景
g.fillRect(0, 0, 400, 300);
this.drawTank(100, 100,g, 0, 0);
/*g.setColor(Color.CYAN);
// 画出我的坦克;(可以封装成一个函数)
//左边矩形
//g.fillRect(hero.getX(), y, 5, 30);
g.fill3DRect(hero.getX(), y, 5, 30,false);
// 画出右边的矩形
//g.fillRect(hero.getX()+15, y, 5, 30);
g.fill3DRect(hero.getX()+15, y, 5, 30,false);
g.setColor(Color.white);
//画出中间矩形
//g.fillRect(hero.getX()+5, y+5, 10, 20);
g.fill3DRect(hero.getX()+5, y+5, 10, 20,false);
//画出圆形
g.fillOval(hero.getX()+5, y+10,10,10);
//画出线
g.drawLine(hero.getX()+10, y+10,hero.getX()+10,10);*/
}
//画坦克的函数
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.fillRect(x, y, 5, 30);
g.fill3DRect(x, y, 5, 30,false);
// 画出右边的矩形
//g.fillRect(x+15, y, 5, 30);
g.fill3DRect(x+15, y, 5, 30,false);
//画出中间矩形
//g.fillRect(x+5, y+5, 10, 20);
g.fill3DRect(x+5, y+5, 10, 20,false);
//画出圆形
g.fillOval(x+5, y+10,10,10);
//画出线
g.drawLine(x+10, y+10,x+10,y-2);
break;
}
}
}
//坦克类
class Tank{
//坦克的横坐标
int x =0;
//坦克的纵坐标
int y =0;
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;
}
public Tank(int x,int y) {
this.x = x;
this.y = y;
}
}
class Helo extends Tank{
public Helo(int x,int y) {
super(x,y);
}
}