import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main extends JFrame {
private int number = 0;
private int t = 0;
private double a = 0;
private double b = 0;
private Image img = new ImageIcon("src/a.png").getImage();
private int sx1, sy1, sx2, sy2;// 源矩形左上角和右下角坐标
private int dx1, dy1, dx2, dy2;// 目标矩形对应角的坐标
private int origin, width, height;// 记录原点,图片宽和高
public Main() {
origin = 0;
width = img.getWidth(this);
height = img.getHeight(this);
dx1 = sx1 = origin;// 初始化,目标矩形和源矩形左上角坐标在原点上
dy1 = sy1 = origin;
dx2 = sx2 = width;
dy2 = sy2 = height;
Main1();
}
public void Main1() {
setTitle("绘制几何图形");
setBounds(100, 200, 500, 500);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
JPanel p = new JPanel();
this.setContentPane(p);
// 方法类
MyCanvas canvas = new MyCanvas();
CanvasTest canvas1 = new CanvasTest();
MyCanvas2 canvas2 = new MyCanvas2();
MyCanvas3 canvas3 = new MyCanvas3();
p.setLayout(new BorderLayout());
// 如果想尝试其他功能请将注释去掉。一个画板只能实现一个形式的功能
// p.add(canvas, BorderLayout.CENTER);//增大,缩小功能
// p.add(canvas1, BorderLayout.CENTER);//水平旋转和垂直旋转功能
// p.add(canvas2, BorderLayout.CENTER);//旋转功能
p.add(canvas3, BorderLayout.CENTER);// 倾斜功能
addKeyListener(new KeyAdapter() {// 添加键盘监听。上下左右改动倾斜角度
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_UP) {
b -= 0.1;
}
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
b += 0.1;
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
a -= 0.1;
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
a += 0.1;
}
canvas3.repaint();
}
});
canvas2.addMouseListener(new MouseListener() {// 点击画布旋转
@Override
public void mouseClicked(MouseEvent var1) {// 鼠标点击旋转
t++;
canvas2.repaint();
}
@Override
public void mousePressed(MouseEvent var1) {
// TODO 自动生成的方法存根
}
@Override
public void mouseReleased(MouseEvent var1) {
// TODO 自动生成的方法存根
}
@Override
public void mouseEntered(MouseEvent var1) {
// TODO 自动生成的方法存根
}
@Override
public void mouseExited(MouseEvent var1) {
// TODO 自动生成的方法存根
}
});
JPanel p2 = new JPanel();
JButton button1 = new JButton("增大");
JButton button2 = new JButton("缩小");
p2.setLayout(new GridBagLayout());
p2.add(button1);
p2.add(button2);
p.add(p2, BorderLayout.SOUTH);
JButton button3 = new JButton("水平旋转");
JButton button4 = new JButton("垂直旋转");
p2.setLayout(new GridBagLayout());
p2.add(button3);
p2.add(button4);
p.add(p2, BorderLayout.SOUTH);
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent var1) {
number += 10;
canvas.repaint();// 画板重绘
}
});
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent var1) {
number -= 10;
canvas.repaint();
}
});
button3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent var1) {
dx1 = Math.abs(dx1 - width);// 两个坐标相减,取绝对值
dx2 = Math.abs(dx2 - width);
canvas1.repaint();
}
});
button4.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent var1) {
dy1 = Math.abs(dy1 - height);// 两个坐标相减,取绝对值
dy2 = Math.abs(dy2 - height);
canvas1.repaint();
}
});
}
private class MyCanvas extends Canvas {
@Override
public void paint(Graphics g) {
int Imagewidth = img.getWidth(this);// 获取宽度,参数随便写
int Imageheight = img.getHeight(this);// 获取高度,参数随便写
g.drawImage(img, 0, 0, Imagewidth + number, Imageheight + number, this);// this:图片展示的窗口
}
}
class CanvasTest extends Canvas {
@Override
public void paint(Graphics g) {
g.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, this);
}
}
class MyCanvas2 extends Canvas {
@Override
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.rotate(Math.toRadians(t));
g2.drawImage(img, 70, 10, 300, 200, this);// 绘制指定大小的图片
}
}
class MyCanvas3 extends Canvas {
@Override
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.shear(a, b);// 设置倾斜量
g2.drawImage(img, 70, 10, 300, 200, this);// 绘制指定大小的图片
}
}
public static void main(String args[]) {
Main m = new Main();
}
}
运行结果为(代码有注释,会影响按钮的点击。将注释去掉就可以实现另外几种功能):