第十九章总结:Java绘图

19.1:Java绘图类


19.2:绘制图形
package nineteentn;
import java.awt.*;
import javax.swing.*;
 
public class DrawCircle extends JFrame {
    private final int OVAL_WIDTH = 80; // 圆形的宽
    private final int OVAL_HEIGHT = 80; // 圆形的高
 
    public DrawCircle() {
        initialize(); // 调用初始化方法
    }
 
    private void initialize() {// 初始化方法
        setSize(300, 200); // 设置窗体大小
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体关闭模式
        setContentPane(new DrawPanel()); // 设置窗体面板为绘图面板对象
        setTitle("绘图实例1"); // 设置窗体标题
    }
 
    class DrawPanel extends JPanel {// 创建绘图面板
        public void paint(Graphics g) {// 重写绘制方法
            g.drawOval(10, 10, OVAL_WIDTH, OVAL_HEIGHT); // 绘制第1个圆形
            g.drawOval(80, 10, OVAL_WIDTH, OVAL_HEIGHT); // 绘制第2个圆形
            g.drawOval(150, 10, OVAL_WIDTH, OVAL_HEIGHT); // 绘制第3个圆形
            g.drawOval(50, 70, OVAL_WIDTH, OVAL_HEIGHT); // 绘制第4个圆形
            g.drawOval(120, 70, OVAL_WIDTH, OVAL_HEIGHT); // 绘制第5个圆形
        }
    }
 
    public static void main(String[] args) {
        new DrawCircle().setVisible(true);
    }
}//例题19.1

 
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
 
public class DrawFrame extends JFrame {
    public DrawFrame() {
        setTitle("绘图实例2"); // 设置窗体标题
        setSize(300, 200); // 设置窗体大小
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体关闭模式
        add(new CanvasPanel()); // 设置窗体面板为绘图面板对象
 
    }
 
    class CanvasPanel extends JPanel {// 绘图变慢
        public void paint(Graphics g) {
            Graphics2D g2 = (Graphics2D) g;
            Shape[] shapes = new Shape[4]; // 声明图形数组
            shapes[0] = new Ellipse2D.Double(5, 5, 100, 100); // 创建圆形对象
            shapes[1] = new Rectangle2D.Double(110, 5, 100, 100); // 创建矩形对象
 
            shapes[2] = new Rectangle2D.Double(15, 15, 80, 80); // 创建矩形对象
            shapes[3] = new Ellipse2D.Double(120, 15, 80, 80); // 创建圆形对象
            for (Shape shape : shapes) { // 遍历图形数组
                Rectangle2D bounds = shape.getBounds2D();
                if (bounds.getWidth() == 80)
                    g2.fill(shape); // 填充图形
                else
                    g2.draw(shape); // 绘制图形
            }
        }
    }
 
    public static void main(String[] args) {
        new DrawFrame().setVisible(true);
    }
}
 
//例题19.2

19.3:绘图颜色与画笔属性
19.3.1:绘制颜色

    if (bounds.getWidth() == 80){//小的是实心的,大的是空心的
                    Color c = new Color(255,0,0);//设置颜色
                    g2.setColor(c);
                    g2.fill(shape);//填充变颜色
                    g2.fill(shape); // 填充图形
                }else {
                    Color c = new Color(0,0,255);//让线条变颜色
                    g2.setColor(c);
                    g2.draw(shape); // 绘制图形
                
                }


19.3.2:绘制画笔

19.4:绘制文本
19.4.1:设置字体

package nineteentn;
import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.util.Date;
import javax.swing.*;
 
public class DrawString extends JFrame {
 
    public DrawString() {
        setSize(230, 140); // 设置窗体大小
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体关闭模式
        add(new CanvasPanel()); // 设置窗体面板为绘图面板对象
        setTitle("绘图文本"); // 设置窗体标题
    }
 
    class CanvasPanel extends JPanel {
        public void paint(Graphics g) {
            Graphics2D g2 = (Graphics2D) g;
            Rectangle2D rect = new Rectangle2D.Double(10, 10, 200, 80);
            g2.setColor(Color.CYAN); // 设置当前绘图颜色
            g2.fill(rect); // 填充矩形
            Font font = new Font("宋体", Font.BOLD, 16);//创建字体
            Date date = new Date();
            g2.setColor(Color.BLUE); // 设置当前绘图颜色
            g2.setFont(font); // 设置字体
            g2.drawString("现在时间是", 20, 30); // 绘制文本
            g2.drawString(String.format("%tr", date), 50, 60); // 绘制时间文本
        }
    }
 
    public static void main(String[] args) {
        new DrawString().setVisible(true);
    }
}
//例题19.3

PLAIN:正常文字

BOLD:加粗

ITALIC:斜体

19.4.2:显示文字

package nineteentn;
 
 
import java.awt.*;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;
 
public class DrawImage extends JFrame {
    Image img;// 展示的图片
 
    public DrawImage() {
        try {
            img = ImageIO.read(new File("src/img.jpg"));// 读取图片文件
        } catch (IOException e) {
            e.printStackTrace();
        }
        setSize(800, 800); // 设置窗体大小
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体关闭模式
        add(new CanvasPanel()); // 设置窗体面板为绘图面板对象
        setTitle("绘制图片"); // 设置窗体标题
    }
 
    class CanvasPanel extends JPanel {
        public void paint(Graphics g) {
            Graphics2D g2 = (Graphics2D) g;
            g2.drawImage(img, 0, 0, this); // 显示图片,图片,x,y轴,重新绘制时通知哪个对象
        }
    }
 
    public static void main(String[] args) {
        new DrawImage().setVisible(true);
    }
}//例题19.4

19.5:显示图片
package nineteentn;
 
 
import java.awt.*;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;
 
public class DrawImage extends JFrame {
    Image img;// 展示的图片
 
    public DrawImage() {
        try {
            img = ImageIO.read(new File("src/img.jpg"));// 读取图片文件
        } catch (IOException e) {
            e.printStackTrace();
        }
        setSize(800, 800); // 设置窗体大小
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体关闭模式
        add(new CanvasPanel()); // 设置窗体面板为绘图面板对象
        setTitle("绘制图片"); // 设置窗体标题
    }
 
    class CanvasPanel extends JPanel {
        public void paint(Graphics g) {
            Graphics2D g2 = (Graphics2D) g;
            g2.drawImage(img, 0, 0, this); // 显示图片,图片,x,y轴,重新绘制时通知哪个对象
        }
    }
 
    public static void main(String[] args) {
        new DrawImage().setVisible(true);
    }
}//例题19.4

19.6:图像处理
19.6.1:放大和缩小

package nineteentn;
 
import java.awt.*;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.event.*;
 
public class ImageZoom extends JFrame {
    Image img;
    private int imgWidth, imgHeight;
    private JSlider jSlider;
 
    public ImageZoom() {
        try {
            img = ImageIO.read(new File("src/img.jpg"));// 读取图片文件
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        CanvasPanel canvas = new CanvasPanel();
        jSlider = new JSlider();
        jSlider.setMaximum(1000);//滚动条
        jSlider.setValue(100);
        jSlider.setMinimum(1);
        jSlider.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent e) {
                canvas.repaint();
            }
        });
 
        JPanel center = new JPanel();
        center.setLayout(new BorderLayout());//居中
        center.add(jSlider, BorderLayout.SOUTH);
        center.add(canvas, BorderLayout.CENTER);
        setContentPane(center);
        setBounds(100, 100, 800, 600); // 设置窗体大小和位置
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体关闭模式
        setTitle("绘制图片");
    }
 
    class CanvasPanel extends JPanel {
        public void paint(Graphics g) {
            int newW = 0, newH = 0;
            imgWidth = img.getWidth(this); // 获取图片宽度
            imgHeight = img.getHeight(this); // 获取图片高度
            float value = jSlider.getValue();// 滑块组件的取值
            newW = (int) (imgWidth * value / 100);// 计算图片放大后的宽度
            newH = (int) (imgHeight * value / 100);// 计算图片放大后的高度
            g.drawImage(img, 0, 0, newW, newH, this);// 绘制指定大小的图片
        }
    }
 
    public static void main(String[] args) {
        new ImageZoom().setVisible(true);
    }
}//例题19.5

19.6.2:图像翻转

package nineteentn;
 
 
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.imageio.ImageIO;
 
public class PartImage extends JFrame {
    private Image img;
    private int dx1, dy1, dx2, dy2;//定义图像坐标
    private int sx1, sy1, sx2, sy2;//定义图像坐标
    private int width = 800, height = 888;// 图片宽高
    private JButton vBtn = null;// 垂直翻转按钮
    private JButton hBtn = null;// 水平翻转按钮
    private CanvasPanel canvasPanel = null;
 
    public PartImage() {
 
        try {
            img = ImageIO.read(new File("src/img.jpg"));// 读取图片文件
        } catch (IOException e) {
            e.printStackTrace();
        }
        dx2 = sx2 = width; // 初始化图像大小
        dy2 = sy2 = height;
 
        vBtn = new JButton("垂直翻转");
        hBtn = new JButton("水平翻转");
 
        JPanel bottom = new JPanel();
        bottom.add(hBtn);
        bottom.add(vBtn);
 
        Container c = getContentPane();
        c.add(bottom, BorderLayout.SOUTH);
        canvasPanel = new CanvasPanel();
        c.add(canvasPanel, BorderLayout.CENTER);
 
        addListener();
 
        setBounds(100, 100, 800, 600); // 设置窗体大小和位置
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体关闭模式
        setTitle("图片翻转"); // 设置窗体标题
    }
 
    private void addListener() {
        vBtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                sy1 = Math.abs(sy1 - height);// 纵坐标互换
                sy2 = Math.abs(sy2 - height);
                canvasPanel.repaint();
            }
        });
        hBtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                sx1 = Math.abs(sx1 - width);// 横坐标互换
                sx2 = Math.abs(sx2 - width);
                canvasPanel.repaint();
            }
        });
    }
 
    class CanvasPanel extends JPanel {
        public void paint(Graphics g) {
            g.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, this);// 绘制指定大小的图片
        }
    }
 
    public static void main(String[] args) {
        new PartImage().setVisible(true);
    }
}//例题19.6

 水平翻转

 垂直翻转

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/178798.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx启动命令

普通启动 切换到nginx安装目录的sbin目录下,执行:./nginx 通过配置文件启动 ./nginx -c /usr/local/nginx/conf/nginx.conf /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 其中-c是指定配置文件,而且配置文件路径必须指定绝对路…

算法刷题:P1908 逆序对

解题关键:就是利用分治的思想,使用归并排序,因为逆序对实际上就是“左侧的数字比右侧大就算一个逆序对”。而这个“左侧”和“右侧”可以相对来看,即左侧的左侧一定就是左侧,说的有点抽象,哈哈哈哈。 花了…

小学生加减乘除闯关运算练习流量主微信小程序开发

小学生加减乘除闯关运算练习流量主微信小程序开发 经过本次更新,我们增加了新的功能和特性,以提升用户体验和运算练习的趣味性: 能量石与激励视频:用户可以通过观看激励视频来获取能量石,这些能量石可以用于解锁收费…

idea启动类运行后报错:Port 6380 was already in use.

问题原因: idea窗口中某个项目还在启动中时 误关了窗口,导致在其他项目运行时报错端口被占用 解决办法: 先杀掉占用端口,再重新启动 步骤如下: 1.先找到6380端口对应pid winr打开cmd命令行窗口 输入命令&#xf…

人力项目框架解析新增修改方法

在迁移项目但是遇到了一些问题,迁移项目的时候发现项目的整体框架很有趣,但是苦于项目框架太大了,竟然只能完整迁移,做不到部分迁移,于是我也只能从一半的角度来进行解释整个项目。 雇员 我们雇员这个为对象讲解一下…

jQuery使用echarts循环插入图表

目录 jQuery动态循环插入echarts图表 y轴显示最大值和最小值 x轴只显示两个值&#xff0c;开始日期和结束日期 jQuery动态循环插入echarts图表 html .center_img_list 是我们循环数据的地方 <div class"center_img shadow"><div class"center_img_b…

响应系统的作用与实现

首先讨论什么是响应式数据和副作用函数&#xff0c;然后尝试实现一个相对完善的响应系统。在这个过程中&#xff0c;我们会遇到各种各样的问题&#xff0c;例如如何避免无限递归&#xff1f;为什么需要嵌套的副作用函数&#xff1f;两个副作用函数之间会产生哪些影响&#xff1…

Leetcode——岛屿的最大面积

1. 题目链接&#xff1a;695. 岛屿的最大面积 2. 题目描述&#xff1a; 给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相邻的 1 (代表土地) 构成的组合&#xff0c;这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都…

【halcon】踩坑unin2

unin1 先说 unin1 这个函数 很好理解&#xff0c;将多个区域求并集&#xff0c;结果就是多个区域会变成一个区域。 unin1 经常和 closing_circle 这个函数连用。 这是应为 当多个区域变成一个区域之后&#xff0c;才能更好的完成闭操作。 unin2 按照思维惯性&#xff0c;看上…

IDEA安装配置SceneBuilder

1、下载 SceneBuilder 地址&#xff1a; Scene Builder - Gluon ​​​​​​​ Scene Builder | JavaFX中文官方网站 选择符合自己系统版本&#xff0c;JAVA版本的下载 2、安装SceneBuilder 执行下载的 SceneBuilder 安装程序&#xff0c;并按照安装向导的指示进行…

iOS WKWebView H5微信、支付宝支付跳转

iOS客户端实现嵌入H5进行支付跳转到客户端&#xff0c;支付完成后再跳转回自己的App时,解决WKWebView无法跳转回APP的BUG. 一、支付宝 - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void…