不是蒋承翰 2021-06-09 22:04 采纳率: 0%
浏览 144

Java设计图形绘制窗口。通过若干按钮控制一个正方形的绘出、删除及面积计算

Java设计图形绘制窗口。通过若干按钮控制一个正方形的绘出、删除及面积计算

  • 写回答

2条回答 默认 最新

  • 关注
    package java3.T8;
    
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.event.MouseListener;
    import java.util.EventListener;
    
    import javax.swing.JFrame;
    
    import java.awt.event.MouseMotionListener;
    
    public class DrawLineApp extends JFrame implements MouseListener, MouseMotionListener {
    	/*
    	 * 
    	 * 绘制界面:
    	 * 	paint( ):进行绘图的具体操作,可以通过重写此方法来实现图形绘制
    		update( ):用于更新图形,先清除背景、前景,然后再调用paint( )方法。
    		repaint( ):用于重绘图形,在组件外形发生变化,
    		即大小改变或位置移动时,repaint( )方法立即被系统自动调用,而实际上repaint( )方法是自动调用update( )方法。
    		repaint->update->paint
    	 * 
    	 * */
    	
    	int startX, startY; // 定义画图的起点x和y坐标
    	int endX, endY; // 定义画图的终点x和y坐标
    	boolean drawing = false; // 定义是否要画图的判断变量
    
    	public DrawLineApp() {
    		super("鼠标画线");
    		//在窗口添加鼠标事件
    		this.addMouseListener(this);
    		//在窗口添加鼠标运动事件(移动,拖曳)
    		this.addMouseMotionListener(this);
    		//设置窗口大小
    		this.setSize(500, 400);
    		//显示窗口
    		setVisible(true);
    		//点击窗口右上角的关闭按钮时,退出程序
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		//窗口居中显示
    		setLocationRelativeTo(null);
    	}
    	//该函数用于绘制窗口,系统自动调用
    	@Override
    	public void paint(Graphics g) {
    		// super.paint(g);
    		//画线函数(起始坐标(x,y),终止坐标(x,y))
    		g.drawLine(startX, startY, endX, endY);
    		//drawRect画矩形
    //		g.drawRect(x, y, width, height);
    		//加载图片
    //		g.drawImage(img, x, y, bgcolor, observer)
    
    	}
    	//系统自动调用
    	@Override
    	public void update(Graphics g) {
    		this.paint(g);
    	}
    	//按下鼠标时触发该事件
    	@Override
    	public void mousePressed(MouseEvent e) {
    		this.drawing = true;
    		this.startX = e.getX(); //获取鼠标当前位置的x值
    		this.startY = e.getY(); //获取鼠标当前位置的y值
    	}
    
    	//释放鼠标
    	public void mouseReleased(MouseEvent e) {
    		
    	}
    
    	//鼠标拖曳
    	public void mouseDragged(MouseEvent e) {
    		if (drawing) {
    			this.endX = e.getX();
    			this.endY = e.getY();
    			//调用repaint函数,其实就是要求系统运行paint函数一次
    			this.repaint();
    			this.startX = e.getX();// 当前点作为起始点
    			this.startY = e.getY();
    		}
    
    	}
    	//鼠标进入
    	public void mouseEntered(MouseEvent e) {
    	}
    	//鼠标离开
    	public void mouseExited(MouseEvent e) {
    	}
    	//鼠标单击
    	public void mouseClicked(MouseEvent e) {
    		/*
    		 * this.drawing=!this.drawing; this.startX=e.getX(); this.startY=e.getY();
    		 */
    	}
    	//鼠标移动
    	public void mouseMoved(MouseEvent e) {
    	}
    	
    	public static void main(String args[]) {
    		new DrawLineApp();
    	}
    }
    
    评论

报告相同问题?