今天学习了编写一个简单的画板
思路:
(1)先创建一个窗体(这里使用流布局方式),并设置鼠标事件监听器。同时创建一个事件监听类,实现鼠标事件监听接口和动作事件监听接口。
(2)再在窗体里面添加相应图形的按钮,比如直线、椭圆、矩形等,并设置动作事件监听器。
(3)在设置窗体可见之后,再设置监听器(事件监听类的对象)的画布对象。
具体代码如下:
1.画板界面类
import java.awt.FlowLayout;
import java.awt.Graphics;
import javax.swing.JButton;
import javax.swing.JFrame;
public class DrawUI {
//显示界面的方法
public void showUI() {
//创建窗体对象
JFrame drawFrame = new JFrame();
//设置窗体的属性
drawFrame.setTitle("画图板V1.0");
drawFrame.setSize(1500,900);
drawFrame.setLocationRelativeTo(null);//位置居中
drawFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//点击关闭会销毁窗体,但不会退出程序
//设置布局为流式布局
drawFrame.setLayout(new FlowLayout());
//创建监听器的对象
DrawListener drawListener = new DrawListener();
//添加监听器
drawFrame.addMouseListener(drawListener);
//添加直线按钮
JButton lineBtn = new JButton("直线");
drawFrame.add(lineBtn);
lineBtn.addActionListener(drawListener);
//添加椭圆按钮
JButton ovalbtn = new JButton("椭圆");
drawFrame.add(ovalbtn);
ovalbtn.addActionListener(drawListener);
//添加矩形按钮
JButton rectbtn = new JButton("矩形");
drawFrame.add(rectbtn);
rectbtn.addActionListener(drawListener);
//设置窗体可见
drawFrame.setVisible(true);
//获取窗体的画布
Graphics g = drawFrame.getGraphics();
//设置监听器的画布对象
drawListener.setGraphics(g);//调用drawListener类的setGraphics方法
}
//主方法
public static void main(String[] args) {
//创建窗体对象
DrawUI ui = new DrawUI();
//显示界面
ui.showUI();
}
}
2.监听器类
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class DrawListener implements MouseListener,ActionListener{
//画布
private Graphics g ;
//记录坐标
int x1,y1,x2,y2;
//用来保存图形类型信息
String type = "";
//点击按钮
public void actionPerformed(ActionEvent e) {
String action = e.getActionCommand();//返回与此动作相关的命令字符串
//保存图形类型的信息
type = action;
}
//设置画布的方法,在DrawUI类中传入的Graphics型参数
public void setGraphics(Graphics arg) {
g = arg;
}
public void mousePressed(MouseEvent e) {
//记录按下鼠标的坐标
x1 = e.getX();
y1 = e.getY();
}
public void mouseReleased(MouseEvent e) {
//记录松开鼠标的坐标
x2 = e.getX();
y2 = e.getY();
//根据图形信息绘制相应图形
if("直线".equals(type)) {
//画线
g.drawLine(x1, y1, x2, y2);
}else if("椭圆".equals(type)) {
//画椭圆
g.drawOval(x1, y1, x2-x1, y2-y1);
}else if("矩形".equals(type)){
g.drawRect(x1, y1, x2-x1, y2-y1);
}
}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
}