基础步骤:
1.创建一个窗体
2: 给窗体添加鼠标监听器
3: 从窗体上获取一个Graphics 传入监听器中
4: 获取鼠标操作时的坐标
5: 在鼠标释放时绘制直线
如下:
package com.ldy0713;
import javax.swing.*;
import java.awt.*;
public class DrawPad {
//监听实现 在DrawPad中创建一个DrawListener对象
DrawListener dl=new DrawListener();
public void initUI(){
//界面开发
//创建JFrame对象 设置标题 设置尺寸 设置关闭方式 设置可视化
JFrame jf=new JFrame();
jf.setTitle("画板2.0");
jf.setSize(500,600);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
//可视化后用窗体对象调用addMouseListener方法 导入DrawListener对象
jf.addMouseListener(dl);
//创建画笔类
Graphics g= jf.getGraphics();
dl.g2=g;
System.out.println(g);
}
//创建一个程序入口,在程序入口创建DrawPad对象,调用initUI方法
public static void main(String[] args) {
DrawPad dp=new DrawPad();
dp.initUI();
}
}
package com.ldy0713;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
//创建一个DrawListener类 DrawListener后实现MouseListener接口
public class DrawListener implements MouseListener {
Graphics g2;
int x1,y1,x2,y2;
//重写MouseListener中的五个方法,在每个方法中写一个输出语句用于测试
public void mousePressed(MouseEvent e){
x1=e.getX();
y1=e.getY();
System.out.println("鼠标按下"+x1+","+y1);
}
public void mouseReleased(MouseEvent e) {
System.out.println("鼠标松开"+x2+","+y2);
x2=e.getX();
y2=e.getY();
//画矩形(坐标连线法 可包含坐标运算)
g2.drawLine(x1,y1,x2,y2);
}
public void mouseEntered(MouseEvent e){
System.out.println("鼠标进入");
}
public void mouseExited(MouseEvent e){
System.out.println("鼠标移出");
}
public void mouseClicked(MouseEvent e){
System.out.println("鼠标点击");
}
}
给窗体上添加按钮 用于选择图形:
1: 给窗体添加按钮 先设置窗体的布局
//......
public class DrawPad {
public void initUI(){
JFrame jf=new JFrame();
jf.setTitle("画板");
jf.setSize(800,600);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
//布局&设置
FlowLayout fl=new FlowLayout();
jf.setLayout(fl);
//按钮&添加
JButton lineBtn=new JButton("直线");
JButton rectBtn=new JButton("矩形");
JButton ovalBtn=new JButton("圆");
JButton triaBtn=new JButton("等腰三角形");
jf.add(lineBtn);
jf.add(rectBtn);
jf.add(ovalBtn);
jf.add(triaBtn);
jf.setVisible(true);
//......
2: 给按钮添加监听器 ,监听器类也要实现ActionListener接口
在DrawListener中 :
//......
//添加按钮监听
lineBtn.addActionListener(dl);
rectBtn.addActionListener(dl);
ovalBtn.addActionListener(dl);
triaBtn.addActionListener(dl);
}
public static void main(String[] args) {
DrawPad dp=new DrawPad();
dp.initUI();
}
}
在DrawPad中:
//......
public class DrawListener implements MouseListener, ActionListener {
Graphics g2;
int x1,y1,x2,y2;
//.......
//监听按钮
public void actionPerformed(ActionEvent e) {
//获取按钮文本
String btnText=e.getActionCommand();
System.out.println("点击"+btnText);
}
}
//......
3: 利用点击按钮时获取的文本在鼠标松开时 判断绘制什么图形
//......
public void mouseReleased(MouseEvent e) {
System.out.println("鼠标松开" + x2 + "," + y2);
x2 = e.getX();
y2 = e.getY();
if (type.equals("直线")) {
g2.drawLine(x1, y1, x2, y2);
} else if (type.equals("矩形")) {
g2.drawLine(x1, y1, x2, y1);
g2.drawLine(x1, y1, x1, y2);
g2.drawLine(x2, y2, x1, y2);
g2.drawLine(x2, y2, x2, y1);
} else if (type.equals("圆")) {
g2.drawOval(x1,y1,Math.abs(x2-x1),Math.abs(y2-y1));
} else if (type.equals("等腰三角形")) {
int x=(x1+x2)/2;
int y=y1;
g2.drawLine(x,y,x1,y2);
g2.drawLine(x,y,x2,y2);
g2.drawLine(x1,y2,x2,y2);
}
}
public void mouseEntered(MouseEvent e) {
System.out.println("鼠标进入");
}
public void mouseExited(MouseEvent e) {
System.out.println("鼠标移出");
}
public void mouseClicked(MouseEvent e) {
System.out.println("鼠标点击");
}
String type="直线";
//监听按钮
public void actionPerformed(ActionEvent e) {
//获取按钮文本
String btnText=e.getActionCommand();
System.out.println("点击"+btnText);
//点击按钮的文本 赋值给type
type=btnText;
}