• 技术文章 >Java >Java基础

    java怎么绘制简单图形

    王林王林2019-11-22 16:18:20原创4985

    Java中绘制基本图形,可以使用Java类库中的Graphics类,此类位于java.awt包中。在我们自己的java程序文件中,要使用Graphics类就需要使用import java.awt.Graphics语句将Graphics类导入进来。

    Graphics类提供基本的几何图形绘制方法,主要有:画线段、画矩形、画圆、画带颜色的图形、画椭圆、画圆弧、画多边形等。本项目仅用到画直线的功能,其它图形绘制请自行点击查阅Java API。

    Graphics类的drawLine()方法:drawLine(int x1,int y1,int x2,int y2)

    此方法的功能是:在此图形上下文的坐标系中,使用当前颜色在点 (x1,y1) 和 (x2,y2)之间画一条线。

    这里需要理解几个概念:

    1)、图形上下文:通俗点讲,就是画图环境。每个窗口构件(如主窗口、按钮等),都有一个自己的图形上下文对象,我们就是使用这个对象来实现在构件上画图。这个对象就是Graphics对象。

    2)、如何获得图形上下文:我们要在哪个构件上绘图,就调用那个构件的getGraphics()方法即可获得该构件的图形上下文对象,然后使用这个对象绘图。

    3)、Java坐标系:

    Java的坐标原点(0,0)位于屏幕的左上角,坐标度量以象素为单位,水平向右为X轴的正方向,竖直向下为Y轴的正方向,每个坐标点的值表示屏幕上的一个像素点的位置,所有坐标点的值都取整数,如下图所示:

    d82abc79001206417470127e2d85a52.png

    4)、当前颜色:指图形上下文当前的颜色。每个图形上下文都有自己当前的颜色。通过Graphics对象的getColor()方法可获取改颜色,setColor()方法可设置颜色。

    示例如下:

    第一步:给DrawSee类添加成员变量,用来描述游戏区域的特征。

    对DrawSee类来说,此类主要完成的功能是与用户交互,即显示游戏区域,显示数字,响应用户鼠标点击,显示用户鼠标点击后的结果等。我们现在考虑绘制10行10列游戏区域的问题。先给DrawSee类添加如下四个成员变量:

    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import javax.swing.JFrame;
    public class DrawSee extends JFrame {
        private static final int sx = 50;//游戏区域10*10方块的起始横坐标
        private static final int sy = 50;//游戏区域10*10方块的起始纵坐标
        private static final int w = 40;//每个小方格的边长
        private static final int rw = 400;//游戏区域10*10方块的边长
        ...
    }

    第二步:添加绘制游戏区域的方法(即绘制10行10列的红色网格)

    public void paintComponents(Graphics g) {
            try {
                // 设置线条颜色为红色
                g.setColor(Color.RED);
                // 绘制外层矩形框
                g.drawRect(sx, sy, rw, rw);            
                /* 绘制水平10个,垂直10个方格。
                 * 即水平方向9条线,垂直方向9条线,
                 * 外围四周4条线已经画过了,不需要再画。
                 * 同时内部64个方格填写数字。
                 */
                for(int i = 1; i < 10; i ++) {
                    // 绘制第i条竖直线
                    g.drawLine(sx + (i * w), sy, sx + (i * w), sy + rw);
                    // 绘制第i条水平线
                    g.drawLine(sx, sy + (i * w), sx + rw, sy + (i * w));                
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    总结:

    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import javax.swing.JFrame;
    /**
     * 
     * 程序入口
     *
     */
    public class TestDrawLine {   
        public static void main(String[] args) {   
            new DrawSee();
        }   
    }   
    class DrawSee extends JFrame {
        private static final int sx = 50;//小方格宽度
        private static final int sy = 50;//小方格高度
        private static final int w = 40;
        private static final int rw = 400;
        private Graphics jg;
        private Color rectColor = new Color(0xf5f5f5);
        /**
         * DrawSee构造方法
         */
        public DrawSee() {
            Container p = getContentPane();
            setBounds(100, 100, 500, 500);
            setVisible(true);
            p.setBackground(rectColor);
            setLayout(null);   
            setResizable(false);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        
            try {    
                Thread.sleep(500);
            } catch (Exception e) {
                e.printStackTrace();
            }        
            // 获取专门用于在窗口界面上绘图的对象
            jg =  this.getGraphics();
            // 绘制游戏区域
            paintComponents(jg);         
        }
        public void paintComponents(Graphics g) {
            try {
                // 设置线条颜色为红色
                g.setColor(Color.RED);
                // 绘制外层矩形框
                g.drawRect(sx, sy, rw, rw);
                
                /* 绘制水平10个,垂直10个方格。
                 * 即水平方向9条线,垂直方向9条线,
                 * 外围四周4条线已经画过了,不需要再画。
                 * 同时内部64个方格填写数字。
                 */
                for(int i = 1; i < 10; i ++) {
                    // 绘制第i条竖直线
                    g.drawLine(sx + (i * w), sy, sx + (i * w), sy + rw);
                    
                    // 绘制第i条水平线
                    g.drawLine(sx, sy + (i * w), sx + rw, sy + (i * w));
                    
                    // 填写第i行从第1个方格到第8个方格里面的数字(方格序号从0开始)
                    for(int j = 0; j < 10; j ++) {
                        //drawString(g, j, i);                    
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    结果如图:

    62ffce67db4590e221482adfcb00a7a.png

    推荐教程:java开发入门

    以上就是java怎么绘制简单图形的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:java 绘制 简单图形
    上一篇:java下载文件名中文乱码解决 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • java中字符串占几个字节• java判断对象是否是string类型• java系统提示找不到指定文件• java下载文件名中文乱码解决
    1/1

    PHP中文网