原实验地址:https://blog.csdn.net/qq_29711355/article/details/125281495
题目
设计并实现一简单图形绘制应用程序,具体要求如下:
(1)使用 AWT/Swing 创建一简单绘制应用程序,图形户界面设计如
下图所示。
(2)设计图形类 Figure,包含起点、终点两个属性,绘制方法 draw。
设计直线类 Line 和矩形类 Rectangle,继承 Figure,并重写 draw 方法。
(3)程序运行时,用户可点击直线按钮,产生直线类的实例,并调用
其 draw 方法,在绘图区绘制出直线;点矩形按钮,产生矩形类的实例,并
调用其 draw 方法,在绘图区绘制出矩形。
示例
参考代码
Figure 类
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
public abstract class Figure {
private Point start;//鼠标点下去的起始位置
private Point end;//鼠标拖拽后的终点位置
private Color color = Color.black;//设置默认的颜色为黑色
public abstract void drawFigure(Graphics g);//定义画图方法
public Point getStart() {
return start;
}
public void setStart(Point start) {
this.start = start;
}
public Point getEnd() {
return end;
}
public void setEnd(Point end) {
this.end = end;
}
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
}
Line 类
import java.awt.*;
public class Line extends Figure{
@Override
public void drawFigure(Graphics g) {
g.setColor(getColor());
g.drawLine(getStart().x, getStart().y, getEnd().x, getEnd().y);
}
@Override
public void setEnd(Point end) {
super.setEnd(end);
}
}
Square 类
import java.awt.Graphics;
import java.awt.Point;
public class Square extends Figure{
private int length;
@Override
public void drawFigure(Graphics g) {
g.setColor(getColor());
g.drawRect(getStart().x, getStart().y, length, length);
}
@Override
public void setEnd(Point end) {
super.setEnd(end);
this.length = Math.abs(getEnd().x - getStart().x);
}
}
DrawFrame 类
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class DrawFrame extends JFrame{
public DrawFrame(){
this.init();
this.loadNorth();
this.loadCenter();
}
private void init() {
setTitle("画板");
setLayout(new BorderLayout());
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(new Dimension(1000,600));
setVisible(true);
}
//北部控件
JPanel jPanel = new JPanel();
JButton jb_line = new JButton("直线");
JButton jb_square = new JButton("正方形");
private void loadNorth() {
jPanel.add(jb_line);
jPanel.add(jb_square);
add(jPanel,BorderLayout.NORTH);
}
private void loadCenter() {
MyCanvas myCanvas = new MyCanvas();
myCanvas.setBackground(Color.WHITE);
add(myCanvas,BorderLayout.CENTER);
}
//画布
private Figure figure = null;
private final MyActionListener myActionListener = new MyActionListener();//添加按键点击事件
private ArrayList<Figure> figs= new ArrayList<Figure>(); //用于存放已经话好的图形
private Color color = Color.BLACK;
public class MyCanvas extends Canvas{
public MyCanvas() {
MouseAdapter mouseAdapter = new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
super.mousePressed(e);
figure.setStart(e.getPoint());
figure.setColor(DrawFrame.this.color);
}
@Override
public void mouseDragged(MouseEvent e) {
super.mouseDragged(e);
figure.setEnd(e.getPoint());
System.out.println(figure.getEnd().x);
System.out.println("" + figure.getEnd().x +" "+ figure.getEnd().y);
if (figure != null) {
MyCanvas.this.repaint();
}
}
};
this.addMouseListener(mouseAdapter);
this.addMouseMotionListener(mouseAdapter);
}
@Override
public void paint(Graphics g) {
super.paint(g);
for (int i = 0; i < figs.size(); i++) {
figs.get(i).drawFigure(g);
}
figure.drawFigure(g);
figs.add(figure);
}
}
//按键监听类
public class MyActionListener implements ActionListener{
public MyActionListener() {
jb_line.addActionListener(this);
jb_square.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
switch (e.getActionCommand()) {
case "直线":
figure = new Line();
break;
case "正方形":
figure = new Square();
break;
default:
break;
}
}
}
public static void main(String[] args) {
new DrawFrame();
}
}
运行结果
说明
个人能力有限,仅供参考,共同学习!