Java AWT简易画图板作业

第一次做java awt,非常简单的小作业,注释写的很详细,

如果能对刚学java的朋友有点点帮助就好。

DrawLineWindow.java

import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

/*继承自Frame的子类 */
public class DrawLineWindow extends Frame {
	private static final long serialVersionUID = 7846501640220266812L;
	/*记录鼠标按下及弹起的坐标 */
	int fromX, fromY;
	int toX, toY;
	
	int width,height; //矩形的长和宽 
	
	int shapeType;//用于区分图形类型的变量
	Vector<Object> lines = new Vector<Object>();//存储已绘制图形的数据 
	
	
	public DrawLineWindow() {
		/*窗口监听器类 ,用于实现窗口右上角的红叉功能 */
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				dispose();
				System.exit(0);
			}
		});
		
		/*鼠标操作的监听器类*/
		addMouseListener(new MouseAdapter() {
			
			/*鼠标按下  */
			public void mousePressed(MouseEvent e){
				fromX = e.getX();//得到x坐标
				fromY = e.getY();//得到y坐标
			}
			
			/*鼠标释放  */
			public void mouseReleased(MouseEvent e){
				toX = e.getX();
				toY = e.getY();
				
				/*根据shapeType的值分类*/
				if(shapeType==1){
					lines.add(new MyLine(fromX, fromY, toX, toY));//向Vector数组添加MyLine元素
				}
				
				if(shapeType==2){
					/*向Vector数组添加MyRectangle元素 下面是对坐标信息存入前的判断修正*/
					if(toX > fromX){
						width = toX-fromX;
					}
					else width =fromX-toX;
					if(toY > fromY){
						height = toY-fromY;
					}
					else height =fromY-toY;
					
					if(fromX>toX && fromY>toY)
						lines.add(new MyRectangle(toX,toY, width, height));
					else if(fromX>toX && fromY<toY)
						lines.add(new MyRectangle(toX,fromY, width, height));
					else if(fromX<toX && fromY>toY)
						lines.add(new MyRectangle(fromX,toY, width, height));
					else
					lines.add(new MyRectangle(fromX,fromY, width, height));
				}
				/*向Vector数组添加MyCircle元素 存入前判断方法如下*/
				if(shapeType==3){
					int r = toX-fromX;
					
					if(fromX>toX && fromY>toY)
						lines.add(new MyCircle(toX,toY,-r));
					else if(fromX>toX && fromY<toY)
						lines.add(new MyCircle(toX,fromY,-r));
					else if(fromX<toX && fromY>toY)
						lines.add(new MyCircle(fromX,toY,r));
					else
					lines.add(new MyCircle(fromX,fromY,r));
				}
				/*调用(重)绘图方法*/
				repaint();
			}
		});
	}
	/*(重)绘图方法*/
	public void paint(Graphics g){
		
		g.setColor(Color.MAGENTA);//颜色
		/*将Vector中已有的元素依次绘制 */
		for(int i=0;i<lines.size();i++){
			/*绘制前判断元素类型 */
			if(lines.get(i)instanceof MyLine){//是line
				MyLine l = (MyLine)lines.get(i);
				l.draw(g);
				g.drawString(fromX+","+fromY, fromX, fromY);
				g.drawString(toX + "," + toY, toX, toY);
			}else if(lines.get(i)instanceof MyRectangle){//是Rectangle
				MyRectangle r = (MyRectangle)lines.get(i);
				r.draw(g);
				g.drawString(fromX+","+fromY, fromX, fromY);
				g.drawString(toX + "," + toY, toX, toY);
			}else if(lines.get(i)instanceof MyCircle){//是Circle
				MyCircle c = (MyCircle)lines.get(i);
				c.draw(g); 
				g.drawString(fromX+","+fromY, fromX, fromY);
				g.drawString(toX + "," + toY, toX, toY);
			}
		}
		
	}

	/*菜单选项的监视器类,继承自ActionListener */
	public class MenuItemListener implements ActionListener {
		/*菜单选项相应,分别为shapeType设定不同数值 */
		public void actionPerformed(ActionEvent e) {
			if (e.getActionCommand().equals("Line")){
						shapeType = 1;
			} else if (e.getActionCommand().equals("Rectangle")) {
			 			shapeType = 2;
			} else if (e.getActionCommand().equals("Circle")) {
			 			shapeType = 3;
			}
	
		}

	}

	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		DrawLineWindow f = new DrawLineWindow();/*声明一个DrawLineWindow类的实例*/
		f.setBounds(300,150,600, 400);/*设置尺寸及位置*/
		f.setTitle("Draw ");
		MenuBar mb = new MenuBar();//创建一个菜单
		f.setMenuBar(mb);          //加入到frame中
		Menu fm = new Menu("Shape ");
		mb.add(fm);
		//为菜单添加几个选项
		fm.add( new MenuItem("Line"));
		fm.add(new MenuItem("Circle"));
		fm.add(new MenuItem("Rectangle"));
		/*为menu添加动作监视器*/
		fm.addActionListener(f.new MenuItemListener());
		
		f.setVisible(true);
		
	}

}
Myshape.java

import java.awt.*;

public abstract class MyShape {

	public abstract void draw(Graphics g);//一个抽象方法
	
}


MyLine.java

import java.awt.Graphics;


public class MyLine extends MyShape{
	private int fromX, fromY;
	private int toX, toY;
	/*构造函数*/
	public MyLine(int x1, int y1, int x2, int y2){
		fromX = x1;
		fromY = y1;
		toX = x2;
		toY = y2;
	}
	/*父类抽象方法draw的实现*/
	public void draw(Graphics g){
		g.drawLine(fromX, fromY, toX, toY);
	}

}

MyCircle.java

import java.awt.Graphics;


public class MyCircle extends MyShape{
	private int centerX;//圆心x坐标
	private int centerY;//圆心y坐标
	private int radius;//圆的半径
	/*构造函数*/
	public MyCircle(int x1, int y1,int r1){
		centerX = x1;
		centerY = y1;
		radius = r1;
	}
	/*父类抽象方法draw的实现*/
	public void draw(Graphics g) {
		g.drawOval(centerX, centerY, radius, radius);
	}
	
}

MyRectangle.java

import java.awt.*;

public class MyRectangle extends MyShape{
	private int fromX, fromY;//矩形左上角x坐标,y坐标
	private int width, height;//矩形长和宽
	/*构造函数*/
	public MyRectangle(int x1,int y1,int w1,int h1){
		
		fromX = x1;
		fromY = y1;
		width = w1;
		height = h1;
		
	}
	/*父类抽象方法draw的实现*/
	public void draw(Graphics g) {
		g.drawRect(fromX, fromY, width, height);
	}
	

}


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值