第十九章总结: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 Shape4; // 声明图形数组

shapes0 = new Ellipse2D.Double(5, 5, 100, 100); // 创建圆形对象

shapes1 = new Rectangle2D.Double(110, 5, 100, 100); // 创建矩形对象

shapes2 = new Rectangle2D.Double(15, 15, 80, 80); // 创建矩形对象

shapes3 = 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

水平翻转

垂直翻转

相关推荐
带刺的坐椅9 分钟前
用 ChatModel 构建 LLM 驱动的 Java 应用
java·ai·llm·solon·rag·chatmodel
Kyrie6781 小时前
SkillOpt:把 Agent 的技能文件当作可训练参数
人工智能
冬奇Lab1 小时前
Workflow 系列(07):工程化与版本管理——Workflow 的 CI/CD
人工智能·工作流引擎
两万五千个小时1 小时前
Claude Code 上下文管理(一):为什么 Agent 会"失忆"?
人工智能·架构·开源
两万五千个小时1 小时前
Claude Code 上下文管理(二):零 Token 消耗的压缩三板斧
人工智能·程序员·开源
冬奇Lab2 小时前
每日一个开源项目(第150篇):caveman - 为什么用很多 token,少 token 也行——给 AI Agent 装上穴居人嘴巴
人工智能·开源·资讯
贵慜_Derek2 小时前
MAI-04|干净数据在工程上意味着什么:MAI 预训练数据治理
人工智能·算法·llm
feelmylife592 小时前
Agent 记忆设计架构 — 分层记忆:什么时候该记住,什么时候该忘记
人工智能
用户3721574261352 小时前
Java 将 Word 文档转换为 Markdown:基础转换与导出选项详解
java
阿黎梨梨2 小时前
揭秘大语言模型的底层逻辑:从文本分词到高维向量的计算之旅
javascript·人工智能