-
常用的绘图方法
1.设置当前画笔的颜色,可多次调用
public abstract void setColor(Color c)
参数:c -颜色
2. 画一条直线
public abstract void drawLine(int x1, int y1, int x2, int y2)
参数:x1 - 第一个点的 x坐标。 y1 - 第一点的 y坐标。 x2 - 第二点的 x坐标。 y2 - 第二点的 y坐标。
3. 画矩形边框
public void drawRect(int x, int y, int width, int height)
参数:x - 要绘制的矩形的 x坐标。 y - 要绘制的矩形的 y坐标。 width - 要绘制的矩形的宽度。 height - 要绘制的矩形的高度。
4. 画填充矩形,填充颜色为画笔颜色
public abstract void fillRect(int x, int y, int width, int height)
参数:x - 要填充的矩形的 x坐标。 y - 要填充的矩形的 y坐标。 width - 要填充的矩形的宽度。 height - 要填充的矩形的高度。
5. 画空心椭圆
public abstract void drawOval(int x, int y, int width, int height)
参数:x - 要绘制的椭圆的左上角的 x坐标。 y - 要绘制的椭圆的左上角的 y坐标。 width - 要绘制的椭圆的宽度。 height - 要绘制的椭圆的高度。
6. 画填充椭圆,填充颜色为画笔颜色
public abstract void fillOval(int x, int y, int width, int height)
参数:x - 要填充的椭圆的左上角的 x坐标。 y - 要填充的椭圆的左上角的 y坐标。 width - 要填充的椭圆的宽度。 height - 要填充的椭圆的高度。
7. 显示图片
(1)准备图片
将准备好的图片放到out目录的该项目根目录下
(2)获取图片资源
Image image =
Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bg.png"));
(3)显示该图片
g.drawImage(image, 10, 10, 175, 221, this);
注:网上直接下载的 .webp 图片改了后缀也放不进去,必须用PS转成其他格式,或者直接使用其他原生图片格式。
8. 显示字符串
(1)设置字体格式
g.setColor(Color.red);
g.setFont(new Font("隶书", Font.BOLD, 50));
(2)显示字体
g.drawString("字体设置", 100, 100);
注:g.drawString 方法的横纵坐标指的是字体的左下角
-
画出坦克图形
public class HspTankGame01 extends JFrame {
// 定义一个MaPanel
MyPanel mp = null;
public static void main(String[] args) {
new HspTankGame01();
}
public HspTankGame01() throws HeadlessException {
mp = new MyPanel();
this.add(mp);
this.setSize(1000,750);
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.setVisible(true);
}
}
public class MyPanel extends JPanel {
// 定义一个我的坦克
Hero hero = null;
// 构造器
public MyPanel() {
hero = new Hero(100, 100);
}
@Override
public void paint(Graphics g) {
super.paint(g);
// 填充区域
g.fillRect(0, 0, 1000, 750);
// 坦克坐标为: x 和 y, 用方法给它包装起来
drawMyTank(hero.getX(), hero.getY(), g, 0, 0);
drawMyTank(hero.getX() + 100, hero.getY(), g, 1, 0);
drawMyTank(hero.getX() + 200, hero.getY(), g, 2, 0);
drawMyTank(hero.getX() + 300, hero.getY(), g, 3, 0);
}
/**
* 画坦克的方法
* @param x 坦克左上角的x横坐标
* @param y 坦克左上角的y的纵坐标
* @param g 画笔
* @param direct 坦克的方向
* @param type 坦克的类型
*/
public void drawMyTank(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);
break;
}
switch (direct) {
case 0: // 向上
// 履带
g.fill3DRect(x, y, 10, 60, false);
g.fill3DRect(x + 30, y, 10, 60, false);
// 车身
g.fill3DRect(x + 10, y + 10, 20, 40, false);
// 炮塔
g.fillOval(x + 9, y + 20, 20, 20);
// 炮管
g.drawLine(x + 20, y, x + 20, y + 30);
break;
case 1: // 向左
// 履带
g.fill3DRect(x, y, 60, 10, false);
g.fill3DRect(x, y + 30, 60, 10, false);
// 车身
g.fill3DRect(x + 10, y + 10, 40, 20, false);
// 炮塔
g.fillOval(x + 20, y + 9, 20, 20);
// 炮管
g.drawLine(x, y + 20, x + 40, y + 20);
break;
case 2: // 向下
// 履带
g.fill3DRect(x, y, 10, 60, false);
g.fill3DRect(x + 30, y, 10, 60, false);
// 车身
g.fill3DRect(x + 10, y + 10, 20, 40, false);
// 炮塔
g.fillOval(x + 9, y + 20, 20, 20);
// 炮管
g.drawLine(x + 20, y + 20, x + 20, y + 60);
break;
case 3: // 向右
// 履带
g.fill3DRect(x, y, 60, 10, false);
g.fill3DRect(x, y + 30, 60, 10, false);
// 车身
g.fill3DRect(x + 10, y + 10, 40, 20, false);
// 炮塔
g.fillOval(x + 20, y + 9, 20, 20);
// 炮管
g.drawLine(x + 20, y + 20, x + 60, y + 20);
break;
default:
System.out.println("其他坦克方向暂时没有处理");
}
}
}
运行结果: