package draw_;
import javax.swing.*;
import java.awt.*;
public class DrawCircle extends JFrame { // JFrame 对应窗口, 可以理解成是一个画框
// 定义一个面板
private MyPanel mp = null;
public static void main(String[] args) {
new DrawCircle();
System.out.println("退出程序");
}
public DrawCircle() { // 构造器
// 初始化面板
mp = new MyPanel();
// 把面板放入到窗口(画框)
this.add(mp);
// 设置窗口的大小
this.setSize(400, 300);
// 当点击窗口的小×, 程序完全退出
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true); // 可以显示
}
}
// 先定义一个 MyPanel, 继承 JPanel 类, 画图形, 就在面板上
class MyPanel extends JPanel {
// 说明:
// 1. MyPanel 对象就是一个画板
// 2. Graphics g 把 g 理解成一支画笔
// 3. Graphics 提供了很多绘图的方法
@Override
public void paint(Graphics g) { // 绘图方法
super.paint(g); // 调用父类的方法完成初始化
System.out.println("paint 方法被调用了");
// 画出一个圆形
g.drawOval(10, 10, 100, 100);
// 绘制不同的图形
// 画直线 drawLine(int x1,int y1,int x2,int y2)
g.drawLine(10, 10, 100, 100);
// 画矩形边框 drawRect(int x, int y, int width, int height)
g.drawRect(10, 10, 100, 100);
// 画椭圆边框 drawOval(int x, int y, int width, int height)
// 填充矩形 fillRect(int x, int y, int width, int height)
// 设置画笔的颜色
g.setColor(Color.blue);
g.fillRect(10, 10, 100, 100);
// 填充椭圆 fillOval(int x, int y, int width, int height)
g.setColor(Color.red);
g.fillOval(10, 10, 100, 100);
// 画图片 drawImage(Image img, int x, int y, ..)
// 获取图片资源, /bg.png 表示在该项目的根目录去获取 bg.png 图片资源
Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bg.png"));
g.drawImage(image, 10, 10, 175, 221, this);
// 画字符串 drawString(String str, int x, int y) // 写字
// 给画笔设置颜色和字体
g.setColor(Color.red);
g.setFont(new Font("隶书", Font.BOLD, 50));
// 这里设置的 100, 100, 是 "北京你好"左下角
g.drawString("北京你好", 100, 100);
// 设置画笔的字体 setFont(Font font)
// 设置画笔的颜色 setColor(Color c)
}
}
package draw_;
import javax.swing.*;
import java.awt.*;
public class DrawCircle extends JFrame { // JFrame 对应窗口, 可以理解成是一个画框
// 定义一个面板
private MyPanel mp = null;
public static void main(String[] args) {
new DrawCircle();
System.out.println("退出程序");
}
public DrawCircle() { // 构造器
// 初始化面板
mp = new MyPanel();
// 把面板放入到窗口(画框)
this.add(mp);
// 设置窗口的大小
this.setSize(400, 300);
// 当点击窗口的小×, 程序完全退出
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true); // 可以显示
}
}
// 1.先定义一个 MyPanel, 继承 JPanel 类, 画图形, 就在面板上
class MyPanel extends JPanel {
// 说明:
// 1. MyPanel 对象就是一个画板
// 2. Graphics g 把 g 理解成一支画笔
// 3. Graphics 提供了很多绘图的方法
@Override
public void paint(Graphics g) { // 绘图方法
super.paint(g); // 调用父类的方法完成初始化
System.out.println("paint 方法被调用了");
// 画出一个圆形
g.drawOval(10, 10, 100, 100);
// 绘制不同的图形
// 画直线 drawLine(int x1,int y1,int x2,int y2)
g.drawLine(10, 10, 100, 100);
// 画矩形边框 drawRect(int x, int y, int width, int height)
g.drawRect(10, 10, 100, 100);
// 画椭圆边框 drawOval(int x, int y, int width, int height)
// 填充矩形 fillRect(int x, int y, int width, int height)
// 设置画笔的颜色
g.setColor(Color.blue);
g.fillRect(10, 10, 100, 100);
// 填充椭圆 fillOval(int x, int y, int width, int height)
g.setColor(Color.red);
g.fillOval(10, 10, 100, 100);
// 画图片 drawImage(Image img, int x, int y, ..)
// 获取图片资源, /bg.png 表示在该项目的根目录去获取 bg.png 图片资源
Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bg.png"));
g.drawImage(image, 10, 10, 175, 221, this);
// 画字符串 drawString(String str, int x, int y) // 写字
// 给画笔设置颜色和字体
g.setColor(Color.red);
g.setFont(new Font("隶书", Font.BOLD, 50));
// 这里设置的 100, 100, 是 "北京你好"左下角
g.drawString("北京你好", 100, 100);
// 设置画笔的字体 setFont(Font font)
// 设置画笔的颜色 setColor(Color c)
}
}
package tankgame;
import javax.swing.*;
public class TankGame01 extends JFrame {
// 定义 MyPanel
MyPanel mp = null;
public static void main(String[] args) {
TankGame01 tankGame01 = new TankGame01();
}
public TankGame01() {
mp = new MyPanel();
this.add(mp); // 把面板(就是游戏的绘图区域)
this.setSize(1000, 750);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
MyPanel.java
package tankgame;
import javax.swing.*;
import java.awt.*;
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); // 填充矩形, 默认黑色
// 画出坦克-封装方法
drawTank(hero.getX(), hero.getY(), g, 0, 0);
}
// 编写方法, 画出坦克
/**
* @param x 坦克的左上角 x 坐标
* @param y 坦克的左上角 y 坐标
* @param g 画笔
* @param direct 坦克方向(上下左右)
* @param type 坦克类型
*/
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);
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 + 10, y + 20, 20, 20); // 画出圆形盖子
g.drawLine(x + 20, y + 30, x + 20, y); // 画出炮筒
break;
default:
System.out.println("暂时没有处理");
}
}
}
Tank.java
package tankgame;
public class Tank {
private int x; // 坦克的横坐标
private int y; // 坦克的纵坐标
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;
}
}
Hero.java
package tankgame;
/**
* 自己的坦克
*/
public class Hero extends Tank {
public Hero(int x, int y) {
super(x, y);
}
}