Java之坦克大战(一)
程序员文章站
2024-03-22 19:26:04
...
学习了Java的UI绘图后我们现在可以先做一个坦克大战来练练手。(跟着韩顺平老师学习的,安利大家想学习的可以看看)
今天主要是做准备工作,
我们来先画一下基本的东西:
1、直线(其实是线段)。
2、椭圆(包括圆)。
3、矩形(实心和矩形框)。
4、图片显示。
5、汉字显示。
接下来我们正式开始:
首先我们需要先新建一个类,这个类主要用来做我们放组件的面板。也是JPanel那边继承过来的。
注:这里我们会用到一个画笔工具 Graphics 类。我们看下说明文档:
这个类很重要。我们画基础图形全部靠他。
接下来我们就不分开上代码了,直接上全部代码:
/**
* Java绘图原理
*/
package com.test1;
import java.awt.*;
import javax.swing.*;
public class Demo9_1 extends JFrame{
MyPanel mp = null;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Demo9_1 demo9_1 = new Demo9_1();
}
public Demo9_1()
{
//在构造函数中新建一个MyPanel实例
mp = new MyPanel();
//把Panel添加到JFrame中
this.add(mp);
this.setSize(500, 500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null); //居中显示
this.setVisible(true);
}
}
//定义一个MyPanel
//用于绘图和实现绘制的区域
class MyPanel extends JPanel{
/**
* 覆盖JPanel的paint方法
* Graphics 是绘图的重要类,可以理解为一只画笔
* paint这个函数是自动被调用的。
* 当然我们也可以人为调用。
* 以下三种情况都会被调用:
* 1、窗口最大化、最小化。
* 2、窗口大小发生变化。
* 3、repaint函数被调用。
*
*/
public void paint(Graphics g)
{
//1.调用父类函数,完成初始化任务。这都是套路
super.paint(g); //这句话不能少,必须要有
//2.先画一个圆圈
//g.drawOval(10, 10, 300, 300);
//3.画直线,线段
//g.drawLine(10, 200, 30, 400);
//4.画矩形边框
//g.drawRect(10, 10, 50, 80);
//5.画实心矩形
/**
* 注:我们画的实心矩形默认颜色是黑色。
* 所以我们可以在画矩形之前先设置要画出
* 矩形的颜色。(颜色也可以自定义)。
* 当我们要画第二个不同颜色的实心矩形时,
* 在每次画矩形前设置好颜色就可以了。
*/
// g.setColor(Color.RED);
// g.fillRect(10, 10, 50, 80);
// g.setColor(Color.cyan);
// g.fillRect(10, 100, 50, 80);
//6.画椭圆框
/**
* 注:前面的x,y设置的椭圆外切矩形的左上角坐标
* 而不是椭圆的圆心。
*/
//g.drawOval(20, 20, 40, 80);
//7.画实心椭圆
// g.setColor(Color.RED);
// g.fillOval(20, 20, 40, 80);
//8.画图片
//得到image
//Image im = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/java_test.jpg"));
/**
* 画图片:
* arg1 图片
* arg2 左上角横坐标
* arg3 左上角纵坐标
* arg4 图片宽
* arg5 图片高
* arg6 this值当前panel
*/
//g.drawImage(im, 20, 20, 300, 130, this);
//9.如何画出字
//设置颜色
g.setColor(Color.red);
//设置字体,颜色,字号
g.setFont(new Font("华文彩云", Font.BOLD, 60));
//要显示的字内容,显示位置
g.drawString("祖国万岁!", 100, 200);
}
}
注:1、demo中有一张图片,没有放上来,大家可以随意换自己喜欢的就好。
2、super.paint(g);这句话很重要,也是套路,每次新建自己的Panel的时候一定要加上这句。
3、椭圆和圆是同一个方法,上过高中的都知道椭圆的两个焦点重合时为圆。
下面我们分别看下结果:
2、
3、
4、
5、
6、
7、
8、
9、