基于MVC的简易图形编辑器
作者:互联网
标题
基于MVC开发一个简易图形编辑器,要求能够在GUI图形界面做出简单的圆形、矩形、椭圆、线段等简单图形。
实验截图
model 层
package com.graph.model;
import java.awt.Graphics;
import java.awt.Point;
//定义图形抽象类
public abstract class Graph {
protected Point pointx;
protected Point pointy;
public Graph() {}
public Graph(Point pointx,Point pointy) {
this.pointx=pointx;
this.pointy=pointy;
}
public Point getPointx() {
return pointx;
}
public void setPointx(Point pointx) {
this.pointx = pointx;
}
public Point getPointy() {
return pointy;
}
public void setPointy(Point pointy) {
this.pointy = pointy;
}
public abstract void paint(Graphics g);
}
package com.graph.model;
import java.awt.Graphics;
import java.awt.Point;
//画圆
public class Cricle extends Graph {
public Cricle(Point pointx,Point pointy) {
super(pointx,pointy);
}
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
int r=(int) Math.sqrt((pointy.x-pointx.x)*(pointy.x-pointx.x)+
(pointy.y-pointx.y)* (pointy.y-pointx.y));
g.drawOval(pointx.x, pointx.y, r, r);
}
}
package com.graph.model;
import java.awt.Graphics;
import java.awt.Point;
//画直线
public class Line extends Graph {
public Line(Point pointx,Point pointy) {
super(pointx,pointy);
}
public void paint(Graphics g) {
g.drawLine(pointx.x,pointx.y,pointy.x,pointy.y);
}
}
package com.graph.model;
import java.awt.Graphics;
import java.awt.Point;
//画椭圆
public class Oval extends Graph {
public Oval(Point pointx,Point pointy) {
super(pointx,pointy);
}
public void paint(Graphics g) {
g.drawOval(pointx.x, pointx.y, pointy.x-pointx.x, pointy.y-pointx.y);
}
}
package com.graph.model;
import java.awt.Graphics;
import java.awt.Point;
//画矩形
public class Rectangle extends Graph {
public Rectangle(Point pointx,Point pointy) {
super(pointx,pointy);
}
public void paint(Graphics g) {
g.drawRect(pointx.x, pointx.y, pointy.x-pointx.x, pointy.y-pointx.y);
}
}
Controller 层
package com.graph.controller;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JPanel;
import com.graph.model.Cricle;
import com.graph.model.Graph;
import com.graph.model.Line;
import com.graph.model.Oval;
import com.graph.model.Rectangle;
public class Adapter extends JPanel implements MouseListener{
String shape = ""; //图案类型
Point[] point = new Point[2];
Graph graph;//得到抽象类
public Adapter() {
super();
this.setBackground(Color.white);
point[0] = new Point(-1,-1);
point[1] = new Point(-1,-1);
addMouseListener(this);
}
public String getShape() {
return shape;
}
public void setShape(String shape) {
this.shape = shape;
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// 鼠标按下
point[0] = new Point(e.getX(),e.getY());
}
@Override
public void mouseReleased(MouseEvent e) {
//鼠标释放
point[1] = new Point(e.getX(),e.getY());
repaint();
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
public void paint(Graphics g) {
super.paint(g);
if(shape.equals("直线")) {
graph=new Line(point[0],point[1]);
}else if(shape.equals("矩形")) {
graph=new Rectangle(point[0],point[1]);
}else if(shape.equals("椭圆")) {
graph =new Oval(point[0],point[1]);
}else if(shape.equals("圆")) {
graph=new Cricle(point[0],point[1]);
}
if(graph!=null)graph.paint(g);
}
}
View 层
package com.graph.view;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import com.graph.controller.Adapter;
public class Frame extends JFrame {
private JToggleButton []button=new JToggleButton[4];
private Adapter adapter=new Adapter();
ButtonGroup buttonGroup = new ButtonGroup();
JPanel jp1 = new JPanel();
public Frame() {
button[0] =new JToggleButton("直线");
button[1] =new JToggleButton("矩形");
button[2] =new JToggleButton("椭圆");
button[3] =new JToggleButton("圆");
DrawShaperListener buttonListener = new DrawShaperListener();
for(int i=0;i<button.length;i++) {
button[i].addActionListener(buttonListener);
buttonGroup.add(button[i]);
jp1.add(button[i]);
}
getContentPane().add(jp1,BorderLayout.NORTH);
getContentPane().add(adapter,BorderLayout.CENTER);
this.setSize(400,400);
this.setTitle("Webb 图形编辑器");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public class DrawShaperListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
for (int i=0;i<button.length;i++){
if (e.getSource()==button[i]){ //判断来自于哪个按钮
adapter.setShape(button[i].getText());
}
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new Frame();
}
}
标签:Point,graph,简易,编辑器,MVC,pointy,pointx,import,public 来源: https://blog.csdn.net/qq_44753804/article/details/106522928