1.创建画图板Drawframe类
2.添加button(动作监听器)
3.加入鼠标监听
下面展示一些 内联代码片
。
//
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import javax.swing.JButton;
import javax.swing.JFrame;
public class DrawFrame {
public static void main(String[] args) {
DrawFrame frame = new DrawFrame();
frame.initUi();
}
public void initUi(){
JFrame jf = new JFrame();//创建新的窗体
jf.setSize(800,700);//设置窗体大小
jf.setTitle("画图板");//定义窗体名字
jf.setLocationRelativeTo(null);//设置居中
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置默认关闭
FlowLayout flow = new FlowLayout();//创建流体布局
jf.setLayout(flow);
String[] name ={"直线","矩形","三角形","多边形","轨迹"};//创建图形数组
Color[] color = {Color.black,Color.red,Color.yellow};//创建颜色数组
DrawMouse mouse = new DrawMouse();//创建监听器对象
for(int i = 0; i<name.length;i++)//根据图形数组创建按钮
{
JButton jbu = new JButton(name[i]);
jf.add(jbu); //在窗体中加入按钮
jbu.addActionListener(mouse);//添加监听器
}
for(int i = 0; i<color.length;i++)//根据颜色数组创建颜色按钮
{
JButton jbu = new JButton();
jbu.setBackground(color[i]);
Dimension dm = new Dimension(30,30);//设置按钮大小
jbu.setPreferredSize(dm);
jbu.setOpaque(true);//设置按钮透明度,因为这里我用的mac,不能直接显示颜色
jbu.setBorderPainted(false);
jf.add(jbu);
jbu.addActionListener(mouse);
}
jf.setVisible(true);//设置窗体可视化
//添加画笔
Graphics g =jf.getGraphics();
jf.addMouseListener(mouse); //添加鼠标监听器
mouse.setGr(g); //调用set方法 把画笔添加进监听器
jf.addMouseMotionListener(mouse); //添加鼠标拖动监听器
}
}
监听器DrawMouse类
```下面展示一些 内联代码片
。
// import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import javax.swing.JButton;
public class DrawMouse implements MouseListener, ActionListener, MouseMotionListener{
private Graphics gr;
private int x1,y1,x2,y2,x3,y3,x4,y4;
private String name = "直线";
private int flag = 0;
public void setGr(Graphics g){
gr=g;
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Click");
x3 = e.getX();
y3 = e.getY();
if(name.equals("三角形")&&flag==1){
gr.drawLine(x1, y1, x3, y3);
gr.drawLine(x3, y3, x2, y2);
flag=0; //确认第三个点 连接另外两个点 画出三角形 并使标记变为0
}
if(name.equals("多边形")&&flag==1)
{
gr.drawLine(x2, y2, x3, y3);
x2=x3;
y2=y3; // 当标记不为0时 记录上一条线结束点的位置
if(e.getClickCount()==2)
{
gr.drawLine(x1, y1, x3, y3);
flag=0;//当鼠标双击时连接最后一个点和初始点
}
}
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println("Pressd");
if(flag==0)
{x1 = e.getX();
y1= e.getY();}
}
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("Released");
if(flag == 0){
x2 = e.getX();
y2 = e.getY();}
//直线
if(name.equals("直线"))
{gr.drawLine(x1,y1,x2,y2);}
//矩形
if(name.equals("矩形"))
{gr.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));}
//三角形
if(name.equals("三角形")&&flag==0)
{
gr.drawLine(x1, y1, x2, y2);
flag++; //画第一条线并记录两个点
}
if(name.equals("多边形") && flag==0)
{
gr.drawLine(x1, y1, x2, y2);
flag++; //画第一条线 并记录两个点。
}
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("Enter");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("Exit");
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals(""))
{JButton jb =(JButton)e.getSource();//
Color color = jb.getBackground();
gr.setColor(color);} //区别颜色button和图形选择button
else
{name = e.getActionCommand();
System.out.println(e.getActionCommand());} //获取图形button的类型
}
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
y4=e.getY();
x4=e.getX();
if(name.equals("轨迹")){
gr.drawLine(x1, y1, x4, y4);
x1=x4;
y1=y4; //记录上个点的位置
}
}
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
}
}