package com.main;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import com.Database.DataBase;
import com.Shape.*;
import com.Tool.*;
public class DrawFrame extends JFrame implements ActionListener{
PaintCanvas paintCanvas = null;
public PaintCanvas getPaintCanvas() {
return paintCanvas;
}
public void setPaintCanvas(PaintCanvas paintCanvas) {
this.paintCanvas = paintCanvas;
}
public DrawFrame() {
super("使用鼠标画直线");
setBounds(400, 300, 400, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
paintCanvas = new PaintCanvas();
getContentPane().add(paintCanvas);
this.addmyMenu();
setVisible(true);
}
private void addmyMenu() {
JMenuBar menubar = new JMenuBar();
this.setJMenuBar(menubar);
String menustr[] = { "文件", "工具", "颜色", "帮助" };
JMenu menu[] = new JMenu[menustr.length];
for (int i = 0; i < menustr.length; i++) {
menu[i] = new JMenu(menustr[i]);
menubar.add(menu[i]);
}
JMenuItem menuItem_open = new JMenuItem("打开");
menu[0].add(menuItem_open);
menuItem_open.addActionListener(this);
JMenuItem menuItem_save = new JMenuItem("保存");
menu[0].add(menuItem_save);
menuItem_save.addActionListener(this);
JMenuItem menuItem_line = new JMenuItem("直线");
menu[1].add(menuItem_line);
menuItem_line.addActionListener(this);
JMenuItem menuItem_Rectangle = new JMenuItem("矩形");
menu[1].add(menuItem_Rectangle);
menuItem_Rectangle.addActionListener(this);
JMenuItem menuItem_Circle = new JMenuItem("椭圆");
menu[1].add(menuItem_Circle);
menuItem_Circle.addActionListener(this);
JMenuItem menuItem_三角形 = new JMenuItem("三角形");
menu[1].add(menuItem_三角形);
menuItem_三角形.addActionListener(this);
JMenuItem menuItem_颜色 = new JMenuItem("颜色");
menu[2].add(menuItem_颜色);
menuItem_颜色.addActionListener(this);
menu[1].addSeparator();
JMenuItem menuItem_exit = new JMenuItem("退出");
menu[1].add(menuItem_exit);
menuItem_exit.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (e.getSource() instanceof JMenuItem) {
if (e.getActionCommand() == "打开")
{
try
{
OpenThread openThread = new OpenThread();
openThread.start();
}
catch(Exception ee)
{
}
}
if (e.getActionCommand() == "保存")
{
try
{
FileWriter fout = new FileWriter("D:\\shape.txt");
for(int i = 0; DataBase.getListShape()!=null && i<DataBase.getListShape().size();i++)
{
fout.write(DataBase.getListShape().get(i).toString());
}
fout.close();
}
catch(Exception ee)
{
}
}
if (e.getActionCommand() == "直线")
{
this.paintCanvas.toolManager.setTool(new LineTool());
}
if (e.getActionCommand() == "矩形")
{
this.paintCanvas.toolManager.setTool(new RectTool());
}
if (e.getActionCommand() == "椭圆")
{
this.paintCanvas.toolManager.setTool(new CircleTool());
}
if (e.getActionCommand() == "三角形")
{
this.paintCanvas.toolManager.setTool(new TrigleTool());
}
if (e.getActionCommand() == "颜色")
{
DataBase.setColor(JColorChooser.showDialog(this, "选择颜色", Color.BLUE));
}
}
}
public static class PaintCanvas extends Canvas implements MouseListener,
MouseMotionListener {
public ToolManager toolManager = new ToolManager();
public ToolManager getToolManager() {
return toolManager;
}
public void setToolManager(ToolManager toolManager) {
this.toolManager = toolManager;
}
Point start, end, lastend;
public PaintCanvas() {
toolManager.setTool(new SelectTool());
start = end = lastend = null;
addMouseListener(this);
addMouseMotionListener(this);
}
@Override
public void paint(Graphics g) {
super.paint(g);
for(int i = 0; DataBase.getListShape()!=null && i<DataBase.getListShape().size();i++)
{
DataBase.getListShape().get(i).draw(g);
if(DataBase.getListShape().get(i).getIsSelected() == 1)
{
DataBase.getListShape().get(i).drawControl(g);
}
}
/*if (start != null && lastend != null) {
g.setColor(this.getBackground());
g.drawLine(start.x, start.y, lastend.x, lastend.y);
g.setColor(Color.BLUE);
g.drawLine(start.x, start.y, end.x, end.y);
}
*/
}
@Override
public void update(Graphics g) {
super.update(g);
paint(g);
}
@Override
public void mouseDragged(MouseEvent e) {
toolManager.mouseMove(new Point(e.getX(), e.getY()));
// lastend = end;
// end = new Point(e.getX(), e.getY());
// repaint();
}
@Override
public void mouseMoved(MouseEvent e) {
try
{
toolManager.mouseMove(new Point(e.getX(), e.getY()));
}
catch(Exception ee)
{
}
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
toolManager.mouseDown(new Point(e.getX(), e.getY()));
start = new Point(e.getX(), e.getY());
}
@Override
public void mouseReleased(MouseEvent e) {
Point point = new Point(e.getX(), e.getY());
toolManager.mouseUp(point);
//end = new Point(e.getX(), e.getY());
//repaint();
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
用继承、多态实验绘制三角形、圆、矩形
共42个文件
class:19个
java:18个
mdl:1个
5星 · 超过95%的资源 需积分: 39 19 下载量 100 浏览量
2010-12-21
11:17:01
上传
评论
收藏 65KB RAR 举报
温馨提示
构建一个图形库,包含基本图形如下: 点(point),具有两个属性(x,y)和绘制点的方法(draw); 三角形(Trigle),具有三个点构成并且可以draw(); 圆(circle),具有一个点(圆心)和半径(radius)并且可以draw; 矩形(rectangle),具有一个顶点和长(length),宽(width),且可以绘制出来; 正方形(square) ,具有一个顶点和边长(length)且可以绘制出来;
资源推荐
资源详情
资源评论
收起资源包目录
Draw101220.rar (42个子文件)
Draw101220
Draw
.project 380B
bin
com
Tool
LineTool.class 1KB
CircleTool.class 1KB
TrigleTool.class 1KB
RectTool.class 1KB
Tool.class 539B
MoveTool.class 2KB
SelectTool.class 2KB
main
DrawFrame.class 4KB
FactoryCreateShape.class 862B
DrawFrame$PaintCanvas.class 3KB
OpenThread.class 2KB
Main.class 538B
ToolManager.class 886B
Database
DataBase.class 2KB
Shape
Trigle.class 1KB
Line.class 2KB
Circle.class 1004B
Rectangle.class 1KB
Shape.class 5KB
.settings
org.eclipse.jdt.core.prefs 629B
Draw.mdl 268KB
src
com
Tool
LineTool.java 885B
TrigleTool.java 866B
Tool.java 216B
RectTool.java 856B
MoveTool.java 1KB
SelectTool.java 1KB
CircleTool.java 866B
main
ToolManager.java 435B
Main.java 261B
FactoryCreateShape.java 448B
OpenThread.java 1KB
DrawFrame.java 6KB
Database
DataBase.java 1021B
Shape
Trigle.java 543B
Rectangle.java 883B
Line.java 2KB
Shape.java 4KB
Circle.java 503B
Draw.md~ 268KB
.classpath 301B
共 42 条
- 1
资源评论
- tianhuisoda2011-12-10不错,不只是用c++编的,还利用了matlab
- bingxianjian2013-03-18功能都很好的实现了,不止用了C++,还用了matlab插件
lxh49
- 粉丝: 4
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功