精华内容
下载资源
问答
  • java绘图

    2021-05-11 23:15:10
    java绘图 例1:将JPanel作为画布放在界面上 可视化控件(包括JPanel)都有一个从父类继承过来的函数:paint,该函数在界面更新时自动调用,可以绘图。 用repaint函数可以手工调用它。 public void paint(Graphics g)...

    java绘图

    例1:将JPanel作为画布放在界面上

    可视化控件(包括JPanel)都有一个从父类继承过来的函数:paint,该函数在界面更新时自动调用,可以绘图。

    用repaint函数可以手工调用它。
    public void paint(Graphics g){}
    Graphics充当“画笔”功能

    package javaPaint5_10;
    
    import javax.swing.*;
    import java.awt.*;
    class MyCanvas extends JPanel{
        public void paint(Graphics g){
            Graphics2D g2d = (Graphics2D)g;
            g2d.setStroke(new BasicStroke(50));
            g2d.drawLine(100,100,200,200);
            g2d.setColor(Color.red);
            g2d.drawOval(100,100,200,200);
            g2d.setColor(Color.blue);
            g2d.fillRect(200,200,100,100);
    
        }
    }
    class MyFrame extends JFrame{
        private MyCanvas mc = new MyCanvas();
        public MyFrame(){
            this.add(mc);
            this.setSize(600,500);
            this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        }
        public static void main(String[] args){
            new MyFrame().setVisible(true);
        }
    }
    
    
    

    image-20210511202255980

    例2:鼠标拖动,界面上能够画图

    package javaPaint5_10;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    class MyCanvas extends JPanel implements MouseMotionListener{//����
        int X=-100,Y=-100;
        MyCanvas(){
            this.addMouseMotionListener(this);
        }
        public void mouseDragged(MouseEvent e) {
            X = e.getX();  Y = e.getY();
            repaint();
        }
        public void mouseMoved(MouseEvent e)  {}
    
        public void paint(Graphics g){
            Graphics2D g2d = (Graphics2D)g;
            g2d.setColor(Color.BLUE);
            g2d.fillRect(X,Y,20,20);
        }
    }
    class MyFrame extends JFrame{
        private MyCanvas mc = new MyCanvas();
        public MyFrame(){
            this.add(mc);
            this.setSize(600,500);
            this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        }
        public static void main(String[] args){
            new MyFrame().setVisible(true);
        }
    }
    
    
    

    image-20210511204842619

    问题:当鼠标移动太快的时候,画的不连续

    例3:界面上随机位置不断出现随机颜色的椭圆

    package javaPaint5_10;
    import javax.swing.*;
    import java.awt.*;
    class MyCanvas extends JPanel implements Runnable{
        MyCanvas(){
            new Thread(this).start();
        }
        public void run(){
            while(true){
                repaint();
                try{Thread.sleep(10);} catch(Exception e){}
            }
        }
        public void paint(Graphics g){
            Graphics2D g2d = (Graphics2D)g;
            g2d.setColor(new Color((int)(256*Math.random()),
                    (int)(256*Math.random()),
                    (int)(256*Math.random())));
            g2d.drawOval((int)(600*Math.random()),
                    (int)(500*Math.random()),
                    (int)(100*Math.random()),
                    (int)(100*Math.random()));
        }
    }
    class MyFrame extends JFrame{
        private MyCanvas mc = new MyCanvas();
        public MyFrame(){
            this.add(mc);
            this.setSize(600,500);
            this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        }
        public static void main(String[] args){
            new MyFrame().setVisible(true);
        }
    }
    
    
    

    image-20210511211312707

    例4:将dog.jpg绘制在画布上

    package javaPaint5_10;
    import javax.swing.*;
    import java.awt.*;
    
    class MyCanvas extends JPanel {
        private Image img = Toolkit.getDefaultToolkit().createImage("dog.jpg");
        public void paint(Graphics g){
            Graphics2D g2d = (Graphics2D)g;
            g.drawImage(img, 100,100, this);	
            g.drawImage(img, 200,200,50,60, this); 
        }
    }
    class MyFrame extends JFrame{
        private MyCanvas mc = new MyCanvas();
        public MyFrame(){
            this.add(mc);
            this.setSize(600,500);
            this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        }
        public static void main(String[] args){
            new MyFrame().setVisible(true);
        }
    }
    
    
    

    例5:将dog.jpg左边一半,填充界面左边一半;右边一半,填充界面的任意指定位置

    package javaPaint5_10;
    
    import javax.swing.*;
    import java.awt.*;
    class MyCanvas extends JPanel {
        private Image img = Toolkit.getDefaultToolkit().createImage("dog.jpg");
        public void paint(Graphics g){
            Graphics2D g2d = (Graphics2D)g;
            g.drawImage(img, 0, 0, this.getWidth()/2, this.getHeight(),
                    0, 0, img.getWidth(this)/2, img.getHeight(this),
                    this);
            g.drawImage(img, 300,300,400,400,
                    img.getWidth(this)/2, 0, img.getWidth(this), img.getHeight(this),
                    this);
    
        }
    }
    class MyFrame extends JFrame{
        private MyCanvas mc = new MyCanvas();
        public MyFrame(){
            this.add(mc);
            this.setSize(600,500);
            this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        }
        public static void main(String[] args){
            new MyFrame().setVisible(true);
        }
    }
    
    
    

    例6鼠标拖动移动图片位置

    package javaPaint5_10;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    class MyCanvas extends JPanel implements MouseMotionListener{
        int X=100,Y=100;
        private Image img = Toolkit.getDefaultToolkit().createImage("dog.jpg");
        MyCanvas(){  this.addMouseMotionListener(this); }
        public void paint(Graphics g){
            Graphics2D g2d = (Graphics2D)g;
            g2d.setColor(Color.white);
            g2d.fillRect(0,0,this.getWidth(),this.getHeight());
            g2d.drawImage(img, X, Y, this);
        }
        public void mouseDragged(MouseEvent e) {
            X = e.getX();  Y = e.getY();
            repaint();
        }
        public void mouseMoved(MouseEvent e)  {}
    }
    class MyFrame extends JFrame{
        private MyCanvas mc = new MyCanvas();
        public MyFrame(){
            this.add(mc);
            this.setSize(600,500);
            this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        }
        public static void main(String[] args){
            new MyFrame().setVisible(true);
        }
    }
    

    例7旋转图片

    package javaPaint5_10;
    
    import javax.swing.*;
    import java.awt.*;
    class MyCanvas extends JPanel {
        private Image img = Toolkit.getDefaultToolkit().createImage("dog.jpg");
        public void paint(Graphics g){
            Graphics2D g2d = (Graphics2D)g;
            g2d.rotate(Math.PI/4, 100,100);
            g.drawImage(img, 100,100, this);
        }
    }
    class MyFrame extends JFrame{
        private MyCanvas mc = new MyCanvas();
        public MyFrame(){
            this.add(mc);
            this.setSize(600,500);
            this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        }
        public static void main(String[] args){
            new MyFrame().setVisible(true);
        }
    }
    

    例8 不停的旋转图片

    package javaPaint5_10;
    
    import javax.swing.*;
    import java.awt.*;
    class MyCanvas extends JPanel implements Runnable{
        private Image img = Toolkit.getDefaultToolkit().createImage("dog.jpg");
        double t = 0;
        MyCanvas(){       new Thread(this).start();  }
        public void run(){
            while(true){
                t=t + 0.1;
                repaint();
                try{Thread.sleep(50);} catch(Exception e){}
            }
        }
        public void paint(Graphics g){
            Graphics2D g2d = (Graphics2D)g;
            g2d.setColor(Color.yellow);
            g2d.fillRect(0,0,this.getWidth(),this.getHeight());
            g2d.rotate(t, 200,200);
            g.drawImage(img, 200,200, this);
        }
    }
    class MyFrame extends JFrame{
        private MyCanvas mc = new MyCanvas();
        public MyFrame(){
            this.add(mc);
            this.setSize(600,500);
            this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        }
        public static void main(String[] args){
            new MyFrame().setVisible(true);
        }
    }
    
    展开全文
  • Java绘图

    万次阅读 多人点赞 2019-04-27 21:50:04
    绘图可以在应用程序中绘制图片、文字、图形等,在Java中主要可以使用Graphics和Graphics2D进行绘图,其中Graphics类是所有图形上下文的抽象基类,而Graphics2D就继承了Graphics类。而Graphics功能没有Graphics2D强大...

    绘图可以在应用程序中绘制图片、文字、图形等,在Java中主要可以使用Graphics和Graphics2D进行绘图,其中Graphics类是所有图形上下文的抽象基类,而Graphics2D就继承了Graphics类。而Graphics功能没有Graphics2D强大,Graphics2D是Graphics的扩展。

    构造一个新的Graphics2D对象,因为Graphics2D是抽象类,所以无法直接创建对象,因很多绘图对象是Graphics类的实例,所以这里使用了强制转换。

    public void paint(Graphics gp){
    
              super.paint(gp);
    
              Graphics2D gp2d = (Graphics2D) gp;

    使用Graphics2D进行绘制图形

    首先创建一个Demo1类继承JFrame类成为窗体,以便显示效果,在Demo1里创建一个内部类Plot类,该类继承JPanel类(容器,把图形放在这个容器里),

    public class Demo1 extends JFrame{
    
        private static final long serialVersionUID = 1L;
    
        //创建绘图面板
    
    class Plot extends JPanel{
    
     private static final long serialVersionUID = 1L;
    
    }

    Plot内部类重写panit()方法,再创建一个BasicStroke对象,Graphics2D可以调用setStroke方法设置笔画的属性,而这个方法要接受一个Stroke接口的实现类作为参数,这样可以通过不同的构造方法创建笔画属性的不同对象。

    class Plot extends JPanel{
    
          public void paint(Graphics gp){
    
              //笔画属性,
    
              BasicStroke bs = new BasicStroke( 10.1f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_BEVEL);
    
              super.paint(gp);
    
             Graphics2D gp2d = (Graphics2D) gp;
    
    }
    
    }

    paint方法里面进行绘图,(设置绘图颜色后,后面绘图都是采取这颜色作为前景色,如果需要更改为其他颜色的话,可以再次调用setColor()方法进行再次设置)

    class Plot extends JPanel{
    
          private static final long serialVersionUID = 1L;
    
          public void paint(Graphics gp){
    
              //笔画属性,
    
              BasicStroke bs = new BasicStroke( 10.1f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_BEVEL);
    
              super.paint(gp);
    
              Graphics2D gp2d = (Graphics2D) gp;
    
              gp2d.setColor(Color.blue);
    
              //第一个点的x坐标,第一个点的y坐标,第二个点的x坐标,第二点的坐标
    
              gp2d.drawLine(30, 30, 80, 30);
    
              //绘制矩形的x坐标,绘制矩形的y坐标,矩形的宽度,矩形的高度
    
              gp2d.drawRect(10,50,100,50);
    
              //绘制矩形的x坐标,绘制矩形的y坐标,矩形的宽度,矩形的高度,4个角弧度的水平直径,4个角弧度的垂直直径
    
              gp2d.drawRoundRect(10, 120, 100, 70, 12, 12);
    
              gp2d.setColor(Color.black);
    
              gp2d.fillOval(20, 130, 30, 20);
    
              gp2d.fillOval(70, 130, 30, 20);
    
              gp2d.setColor(Color.gray);
    
              gp2d.fillArc(35, 160, 40, 25, 100, 270);
    
              Color c1 = new Color(22, 147, 140);//创建红绿蓝不透明的srgb颜色
    
              gp2d.setColor(c1);
    
              gp2d.drawOval(10, 200, 100, 60);//绘制椭圆的边框。
    
              //Graphics2D d=(Graphics2D) gp;
    
              gp2d.fill3DRect(150, 30, 100, 80, false);
    
              gp2d.fillOval(150,130, 100, 80);
    
              gp2d.setStroke(bs);//设置笔画属性
    
             gp2d.drawLine(300, 80, 300, 200);
    
          }
    
       }

    Demo类定义一个初始化窗体的方法,设置窗体大小,关闭窗体模式以及设置内容窗格等

    //初始化窗体
    
       private void initialize(){
    
          this.setSize(800, 600);
    
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体关闭模式
    
          setContentPane(new Plot());
    
          this.setTitle("绘图小Demo");
    
          this.setLocationRelativeTo(null);//窗体居中
    
          this.setVisible(true);//设置窗体的可见性
    
       
    
       }

    Demo类构造器 调用初始化方法

    public Demo1(){
    
          super();
    
          initialize();
    
       }

    主方法 创建实例

    public static void main(String[] args) {
          new Demo1();
       }

    效果:

    绘制图片:在图片上绘制字符串并输出成图片格式

    public static void main(String[] args) throws FileNotFoundException, IOException {
    
          // TODO Auto-generated method stub
    
          //获取图片缓冲区
    
           BufferedImage bi = new BufferedImage(80,40,BufferedImage.TYPE_INT_RGB);
    
           //得到绘制坏境(这张图片的笔)
    
           Graphics gh= (Graphics)bi.getGraphics();
    
           gh.setColor(Color.WHITE);//设置颜色
    
           gh.fillRect(0, 0, 80, 40);//填充整张图片(其实就是设置背景色)
    
           gh.setColor(Color.lightGray);
    
           //gh.drawRoundRect(0, 0, 130, 70, 130, 70);//绘制一个圆形边框
    
           gh.drawRect(0, 0, 80-1, 40-1);//绘制一个四边形边框
    
           gh.setFont(new Font("Bernard MT",Font.BOLD,18));//字体样式 字体格式 字体大小
    
           gh.setColor(Color.BLUE);//设置字体颜色
    
           gh.drawString(getNum(10,100), 22, 25);//向图片上写随机字符串
    
           ImageIO.write(bi, "PNG", new FileOutputStream("D:/test.png"));//把图片输出到指定路径

    随机生成字符串方法

    public static String getNum(int num1,int num2){
    
           //返回num1到num2之间的随机数
    
          Integer rand = num1 + (int)(Math.random()*(num2-num1));
    
          //System.out.println(rand);
    
          int a = (int)(Math.random()*100);
    
          //返回a~z随机的字符
    
          char char1 = (char)('a'+Math.random()*('z'-'a'+1));
    
          //返回A~Z随机的字符
    
          char char2 = (char)('a'+Math.random()*('Z'-'A'));
    
          return rand.toString()+char1+char2;
    
       }

    运行输出

     

    展开全文
  • java绘图java绘图java绘图java绘图java绘图java绘图java绘图java绘图java绘图
  • Java 绘图

    2019-01-19 17:59:07
      ...import java.awt.Canvas; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.Shape; import java.awt.geom.Rectangle2D; import ja...

     

     

    package expression;
    
    import java.awt.Canvas;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Rectangle;
    import java.awt.Shape;
    import java.awt.geom.Rectangle2D;
    
    import javax.swing.JFrame;
    
    public class Demo extends JFrame{
    	
    	public Demo() {
    		super();
    		init();
    		add(new mycanvas());
    	}
    	private void init() {
    		this.setTitle("绘制几何图形");
    		setDefaultCloseOperation(EXIT_ON_CLOSE);
    		this.setSize(500,300);
    	}
    	public static void main(String[] args) {
    		new Demo().setVisible(true);
    	}
    	private class mycanvas extends Canvas {
    
    	 public  void paint(Graphics g) {
    		// TODO Auto-generated method stub
    		Graphics2D g2 = (Graphics2D) g;
    		g2.drawOval(5, 5, 100, 100);
    		g2.fillRect(15, 15, 80, 80);
    		
    		Shape shape1 = new Rectangle2D.Double(100, 5, 100, 100);//矩形对象
    		g2.fill(shape1);
    		
    		int x[]={250,300,250,300};
    		int y[]={130,130,200,200};
    		g2.drawPolygon(x,y,4);//多边形  第三个参数是边数 第一二个参数是 边数横,纵坐标
    		
    		
    		
    	}
    	
    }
    }

     

    展开全文
  • 1. Graphics 绘图画布 Graphics 类相当于一个画布,每个 Swing 组件都通过 Graphics 对象来绘制显示。绘图的原点位于组件的左上角,如下图所示: Graphics类中常用的绘制相关方法: ○ 参数 / 设置: // 创建....

    本文链接: https://blog.csdn.net/xietansheng/article/details/55669157

    Java Swing 图形界面开发(目录)

    1. Graphics 绘图画布

    Graphics 类相当于一个画布,每个 Swing 组件都通过 Graphics 对象来绘制显示。绘图的原点位于组件的左上角,如下图所示:

    Graphics坐标

    Graphics类中常用的绘制相关方法:

    ○ 参数 / 设置:

    // 创建 Graphics 的副本
    Graphics create()
    // 回收 Graphics
    void dispose()
    
    // 设置画笔颜色
    void setColor(Color c)
    // 擦除某一区域(擦除后显示背景色)
    void clearRect(int x, int y, int width, int height)
    

    1、线段 / 折线:

    // 绘制一条线段(如果两点为同一点,则绘制点)
    void drawLine(int x1, int y1, int x2, int y2)
    // 根据给定的多个点坐标绘制折线
    void drawPolyline(int xPoints[], int yPoints[], int nPoints)
    

    2、矩形 / 多边形:

    // 绘制一个矩形(空心)
    void drawRect(int x, int y, int width, int height)
    // 填充一个矩形(实心)
    void fillRect(int x, int y, int width, int height)
    
    // 绘制一个圆角矩形
    void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)
    // 填充一个圆角矩形
    void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)
    
    // 绘制一个3D矩形
    void draw3DRect(int x, int y, int width, int height, boolean raised)
    // 填充一个3D矩形
    void fill3DRect(int x, int y, int width, int height, boolean raised)
    
    // 根据给定的多个点坐标绘制一个多边形(首尾相连)
    void drawPolygon(int xPoints[], int yPoints[], int nPoints)
    // 根据给定的多个点坐标填充一个多边形(首尾相连)
    void fillPolygon(int xPoints[], int yPoints[], int nPoints)
    

    3、圆弧 / 扇形:

    // 绘制一个圆弧(弧线)
    void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)
    // 填充一个圆弧(扇形)
    void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle)
    

    4、椭圆:

    // 绘制一个椭圆
    void drawOval(int x, int y, int width, int height)
    // 填充一个椭圆
    void fillOval(int x, int y, int width, int height)
    

    5、图片

    /*
     * 先读取图片
     */
    // 方法一: 通过 java.awt.Toolkit 工具类来读取本地、网络 或 内存中 的 图片(支持 GIF、JPEG 或 PNG)
    Image image = Toolkit.getDefaultToolkit().getImage(String filename);
    Image image = Toolkit.getDefaultToolkit().getImage(URL url);
    Image image = Toolkit.getDefaultToolkit().createImage(byte[] imageData);
    
    // 方法二: 通过 javax.imageio.ImageIO 工具类读取本地、网络 或 内存中 的 图片(BufferedImage 继承自 Image)
    BufferedImage bufImage = ImageIO.read(File input);
    BufferedImage bufImage = ImageIO.read(URL input);
    BufferedImage bufImage = ImageIO.read(InputStream input);
    
    /*
     * PS_01: 图片宽高: BufferedImage 可以通过 bufImage.getWidth() 和 bufImage.getHeight() 方法直接获取图片的宽高;
     *                 Image 获取宽高需要另外传入一个 ImageObserver 参数。
     *
     * PS_02: 图片裁剪: BufferedImage 通过 bufImage.getSubimage(int x, int y, int w, int h) 方法可以截取图片的
     *                 任意一部分,返回一个新的 BufferedImage 实例。
     *
     * PS_03: 图片缩放: Image 通过 image.getScaledInstance(int width, int height, int hints) 方法可以对图片进行
     *                 缩放,返回新的一个 Image 实例。
     */
    
    // 绘制一张图片(所有组件类实现了 ImageObserver 接口,即组件实例即为 ImageObserver)
    boolean drawImage(Image image, int x, int y, int width, int height, ImageObserver observer)
    

    6、文本

    // 设置字体(字体、样式、大小)
    void setFont(Font font)
    // 绘制一段文本,其中 (x, y) 坐标指的是文本序列的 左下角 的位置
    void drawString(String str, int x, int y)
    

    2. Graphics2D

    在 Swing 组件的实际绘制中通常使用的是 Graphics 的一个子类 Graphics2D, 该类中提供了更为丰富的接口来绘制更为复杂的需求。

    Graphics2D类中的部分方法:

    1、参数 / 设置

    // 设置背景(擦除后显示该背景)
    void setBackground(Color color)
    // 设置笔画的轮廓特性(如画笔宽度、实线、虚线等)
    void setStroke(Stroke s)
    

    2、绘制结果的变换

    // 平移
    void translate(int x, int y)
    // 旋转
    void rotate(double theta, double originX, double originY)
    // 缩放
    void scale(double sx, double sy)
    
    // 将图片经过指定变换后绘制显示
    boolean drawImage(Image image, AffineTransform xform, ImageObserver obs)
    

    3. 自定义组件, 绘图演示

    package com.xiets.drawdemo;
    
    import javax.swing.*;
    import java.awt.*;
    
    public class Main {
    
        public static void main(String[] args) {
            /*
             * 在 AWT 的事件队列线程中创建窗口和组件, 确保线程安全,
             * 即 组件创建、绘制、事件响应 需要处于同一线程。
             */
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    // 创建窗口对象
                    MyFrame frame = new MyFrame();
                    // 显示窗口
                    frame.setVisible(true);
                }
            });
        }
    
        /**
         * 窗口
         */
        public static class MyFrame extends JFrame {
    
            public static final String TITLE = "Java图形绘制";
    
            public static final int WIDTH = 250;
            public static final int HEIGHT = 300;
    
            public MyFrame() {
                super();
                initFrame();
            }
    
            private void initFrame() {
                // 设置 窗口标题 和 窗口大小
                setTitle(TITLE);
                setSize(WIDTH, HEIGHT);
    
                // 设置窗口关闭按钮的默认操作(点击关闭时退出进程)
                setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    
                // 把窗口位置设置到屏幕的中心
                setLocationRelativeTo(null);
    
                // 设置窗口的内容面板
                MyPanel panel = new MyPanel(this);
                setContentPane(panel);
            }
    
        }
    
        /**
         * 内容面板
         */
        public static class MyPanel extends JPanel {
    
            private MyFrame frame;
    
            public MyPanel(MyFrame frame) {
                super();
                this.frame = frame;
            }
    
            /**
             * 绘制面板的内容: 创建 JPanel 后会调用一次该方法绘制内容,
             * 之后如果数据改变需要重新绘制, 可调用 updateUI() 方法触发
             * 系统再次调用该方法绘制更新 JPanel 的内容。
             */
            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
    
                // 重新调用 Graphics 的绘制方法绘制时将自动擦除旧的内容
    
                /* 自行打开下面注释查看各绘制效果 */
    
                // 1. 线段 / 折线
                drawLine(g);
    
                // 2. 矩形 / 多边形
                // drawRect(g);
    
                // 3. 圆弧 / 扇形
                // drawArc(g);
    
                // 4. 椭圆
                // drawOval(g);
    
                // 5. 图片
                // drawImage(g);
    
                // 6. 文本
                // drawString(g);
            }
    
            /**
             * 1. 线段 / 折线
             */
            private void drawLine(Graphics g) {
                frame.setTitle("1. 线段 / 折线");
    
                // 创建 Graphics 的副本, 需要改变 Graphics 的参数,
                // 这里必须使用副本, 避免影响到 Graphics 原有的设置
                Graphics2D g2d = (Graphics2D) g.create();
    
                // 抗锯齿
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                // 设置画笔颜色
                g2d.setColor(Color.RED);
    
                // 1. 两点绘制线段: 点(20, 50), 点(200, 50)
                g2d.drawLine(50, 50, 200, 50);
    
                // 2. 多点绘制折线: 点(50, 100), 点(100, 130), 点(150, 70), 点(200, 100)
                int[] xPoints = new int[] { 50, 100, 150, 200 };
                int[] yPoints = new int[] { 100, 120, 80, 100 };
                int nPoints = 4;
                g2d.drawPolyline(xPoints, yPoints, nPoints);
    
                // 3. 两点绘制线段(设置线宽为5px): 点(50, 150), 点(200, 150)
                BasicStroke bs1 = new BasicStroke(5);       // 笔画的轮廓(画笔宽度/线宽为5px)
                g2d.setStroke(bs1);
                g2d.drawLine(50, 150, 200, 150);
    
                // 4. 绘制虚线: 将虚线分为若干段( 实线段 和 空白段 都认为是一段), 实线段 和 空白段 交替绘制,
                //             绘制的每一段(包括 实线段 和 空白段)的 长度 从 dash 虚线模式数组中取值(从首
                //             元素开始循环取值), 下面数组即表示每段长度分别为: 5px, 10px, 5px, 10px, ...
                float[] dash = new float[] { 5, 10 };
                BasicStroke bs2 = new BasicStroke(
                        1,                      // 画笔宽度/线宽
                        BasicStroke.CAP_SQUARE,
                        BasicStroke.JOIN_MITER,
                        10.0f,
                        dash,                   // 虚线模式数组
                        0.0f
                );
                g2d.setStroke(bs2);
                g2d.drawLine(50, 200, 200, 200);
    
                // 自己创建的副本用完要销毁掉
                g2d.dispose();
            }
    
            /**
             * 2. 矩形 / 多边形
             */
            private void drawRect(Graphics g) {
                frame.setTitle("2. 矩形 / 多边形");
                Graphics2D g2d = (Graphics2D) g.create();
    
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                g2d.setColor(Color.GRAY);
    
                // 1. 绘制一个矩形: 起点(30, 20), 宽80, 高100
                g2d.drawRect(30, 20, 80, 100);
    
                // 2. 填充一个矩形
                g2d.fillRect(140, 20, 80, 100);
    
                // 3. 绘制一个圆角矩形: 起点(30, 150), 宽80, 高100, 圆角宽30, 圆角高30
                g2d.drawRoundRect(30, 150, 80, 100, 30, 30);
    
                // 4. 绘制一个多边形(收尾相连): 点(140, 150), 点(180, 250), 点(220, 200)
                int[] xPoints = new int[] { 140, 180, 220};
                int[] yPoints = new int[] { 150,  250, 200};
                int nPoints = 3;
                g2d.drawPolygon(xPoints, yPoints, nPoints);
    
                g2d.dispose();
            }
    
            /**
             * 3. 圆弧 / 扇形
             */
            private void drawArc(Graphics g) {
                frame.setTitle("3. 圆弧 / 扇形");
                Graphics2D g2d = (Graphics2D) g.create();
    
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                g2d.setColor(Color.RED);
    
                // 1. 绘制一条圆弧: 椭圆的外切矩形 左上角坐标为(0, 0), 宽100, 高100,
                //                弧的开始角度为0度, 需要绘制的角度数为-90度,
                //                椭圆右边水平线为0度, 逆时针为正角度, 顺时针为负角度
                g2d.drawArc(0, 0, 100, 100, 0, -90);
    
                // 2. 绘制一个圆: 圆的外切矩形 左上角坐标为(120, 20), 宽高为100
                g2d.drawArc(120, 20, 100, 100, 0, 360);
    
                g2d.setColor(Color.GRAY);
    
                // 3. 填充一个扇形
                g2d.fillArc(80, 150, 100, 100, 90, 270);
    
                g2d.dispose();
            }
    
            /**
             * 4. 椭圆 (实际上通过绘制360度的圆弧/扇形也能达到绘制圆/椭圆的效果)
             */
            private void drawOval(Graphics g) {
                frame.setTitle("4. 椭圆");
                Graphics2D g2d = (Graphics2D) g.create();
    
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                g2d.setColor(Color.RED);
    
                // 1. 绘制一个圆: 圆的外切矩形 左上角坐标为(0, 0), 宽高为100
                g2d.drawOval(0, 0, 100, 100);
    
                g2d.setColor(Color.GRAY);
    
                // 2. 填充一个椭圆
                g2d.fillOval(120, 100, 100, 150);
    
                g2d.dispose();
            }
    
            /**
             * 5. 图片
             */
            private void drawImage(Graphics g) {
                frame.setTitle("5. 图片");
                Graphics2D g2d = (Graphics2D) g.create();
    
                // 从本地读取一张图片
                String filepath = "demo.jpg";
                Image image = Toolkit.getDefaultToolkit().getImage(filepath);
    
                // 绘制图片(如果宽高传的不是图片原本的宽高, 则图片将会适当缩放绘制)
                g2d.drawImage(image, 50, 50, image.getWidth(this), image.getHeight(this), this);
    
                g2d.dispose();
            }
    
            /**
             * 6. 文本
             */
            private void drawString(Graphics g) {
                frame.setTitle("6. 文本");
                Graphics2D g2d = (Graphics2D) g.create();
    
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    
                // 设置字体样式, null 表示使用默认字体, Font.PLAIN 为普通样式, 大小为 25px
                g2d.setFont(new Font(null, Font.PLAIN, 25));
    
                // 绘制文本, 其中坐标参数指的是文本绘制后的 左下角 的位置
                // 首次绘制需要初始化字体, 可能需要较耗时
                g2d.drawString("Hello World!", 20, 60);
                g2d.drawString("你好, 世界!", 20, 120);
    
                g2d.dispose();
            }
    
        }
    
    }
    

    结果展示:

    result.png

    4. 把组件上绘制的内容保存为图片

    // import javax.imageio.ImageIO;
    // import java.awt.image.BufferedImage;
    
    // 获取到需要保存内容的组件(面板)
    JPanel panel = (JPanel) frame.getContentPane();
    
    // 创建一个与面板等宽高的缓存图片
    BufferedImage image = new BufferedImage(
            panel.getWidth(), 
            panel.getHeight(), 
            BufferedImage.TYPE_INT_ARGB
    );
    
    // 获取缓存图片的画布
    Graphics2D g2d = image.createGraphics();
    
    // 把面板的内容画到画布中
    panel.paint(g2d);
    
    try {
        // 把缓存图片保存到本地文件
        ImageIO.write(image, "png", new File("panel.png"));
    } catch (Exception e) {
        e.printStackTrace();
    }
    

    扩展: Java图片操作 — 图片的读取、绘制、缩放、裁剪、保存

    展开全文
  • java绘图

    2015-06-11 20:21:29
    java绘图包,谁用谁知道.这个Java绘图包能够帮助开发者更好开发界面。
  • java绘图技术

    2016-07-23 11:34:36
    java绘图技术
  • java绘图

    2011-12-01 22:31:15
    初学java绘图 旋转绘制 花叶 花蕾 渐变颜色
  • 第十二章java教程 Java绘图;9.1 Graphics类 9.1.1 绘制直线;9.1.2 绘制矩形;大家应该也有点累了稍作休息;9.1.3 绘制3D矩形;9.2 Graphics2D类;9.2.2 绘制2D矩形;9.2.3 绘制2D圆角矩形;9.2.4 绘制椭圆;9.2.5 绘制2D园...
  • java绘图原理

    2018-08-25 10:23:18
     * 功能:java绘图原理  */ package com.tankedazhan; import java.awt.Color; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; public class Demo2_1...
  • 简单java绘图代码

    2014-04-30 16:21:41
    java 绘图入面基础,编程的理论需要自己动手实践才可以学会!
  • 主要介绍了Java绘图技术的详解及实例的相关资料,这里主要详解Graphics类的使用,需要的朋友可以参考下
  • java 绘图板 源代码

    2009-11-10 08:10:09
    java 绘图板 源代码java 绘图板 源代码java 绘图板 源代码java 绘图板 源代码java 绘图板 源代码java 绘图板 源代码
  • java绘图原理(坦克)

    2017-07-03 19:34:39
    java绘图原理,绘制一个坦克大战中的坦克,
  • java绘图javahuitu

    2010-06-04 08:44:39
    java绘图,基本能满足你的要求,让你游刃有余,基本能满足你的要求,让你游刃有余
  • Java绘图基础资料

    2012-03-16 20:59:03
    Java绘图基础资料 主要是Swing方面
  • java绘图程序代码

    2012-11-20 23:26:25
    java绘图。你可以用各种控件,去画你想要的图形
  • java绘图 绘制椭圆java绘图 绘制椭圆java绘图 绘制椭圆
  • java绘图

    2015-02-27 15:34:00
    JAVA绘图板 import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Frame; import.....
  • Java绘图.ppt

    2009-07-22 23:29:09
    Java绘图.pptJava绘图.pptJava绘图.pptJava绘图.pptJava绘图.pptJava绘图.pptJava绘图.pptJava绘图.pptJava绘图.ppt

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,226
精华内容 1,290
关键字:

java绘图

java 订阅