Java设计图形绘制窗口。通过若干按钮控制一个正方形的绘出、删除及面积计算
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();
}
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632