我们要来图形图像的处理,目标就是滑动鼠标绘制一根直线,绘制一个矩形,绘制一个圆,并且绘制任意的一个三角形,和任意的一个等腰三角形
我们先创建一个DrawPad类,在这个类里面完成一些操作
步骤1、创建一个界面,并且流式化布局
public void initUI() {JFrame jf = new JFrame();jf.setTitle("图形图像绘制");jf.setSize(800,600);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 流式布局 FlowLayout fl = new FlowLayout();jf.setLayout(fl);
2、然后加入五个按钮,直线,矩形,圆,三角形,等腰三角形
JButton btnLine = new JButton("直线");
JButton btnRect = new JButton("矩形");
JButton btnOval = new JButton("圆");
JButton btnTragnle = new JButton("三角形");
JButton btn1 = new JButton("等腰三角形");
3、将这五个按钮加入到界面中,并且可视化
jf.add(btnLine);
jf.add(btnRect);
jf.add(btnOval);
jf.add(btnTragnle);
jf.add(btn1);jf.setVisible(true);
4、我们要为窗体添加鼠标监听,按钮添加动作监听
创建一个DrawListener类,需要实施动作监听(ActionListener)和鼠标监听(MouseListener)
并且需要定义5个坐标,画直线,矩形,圆只需要两个,其次我们需要实现,任意点击3个坐标,就可以生成一个三角形
public class DrawListener implements ActionListener,MouseListener {int x1,y1,x2,y2,x3,y3,x4,y4,x5,y5;public Graphics g;String btnstr = "";
接下来,先写ActionListener的方法--actionperformed,在这个方法中,我们需要去获取按钮上的字段
public void actionPerformed(ActionEvent e) {btnstr = e.getActionCommand();}
接下来,就需要写MouseListener的5个方法,分别是点击(mouseClicked),按下(mousePressed),释放(mouseReleased),进入(mouseEntered),离开(mouseExited)
1、点击,我们点击获取3个坐标,然后分别连成直线,这样就可以成为任意的三角形
int count = 0;public void mouseClicked(MouseEvent e) {if(btnstr.equals("三角形")) {if(count == 0) {x3 = e.getX();y3 = e.getY();count++;}else if(count == 1) { x4 = e.getX();y4 = e.getY();g.drawLine(x3, y3, x4, y4);count++;}else if(count ==2) {x5 = e.getX();y5 = e.getY();g.drawLine(x3,y3,x5,y5);g.drawLine(x5,y5,x4,y4);count = 0;}}}
2、按下,我需要按下的时候获取一组坐标,在释放的时候再获取一组坐标,这样就可以直接或者矩形了
public void mousePressed(MouseEvent e) {x1 = e.getX();y1 = e.getY();System.out.println("btnstr="+btnstr);}
3、释放,获取另一组坐标,并且利用Graphics画出来
public void mouseReleased(MouseEvent e) {x2 = e.getX();y2 = e.getY();if(btnstr.equals("直线")){g.drawLine(x1,y1,x2,y2);}else if(btnstr.equals("矩形")) {g.drawRect(Math.min(x1, x2),Math.min(y1,y2),Math.abs(x2-x1),Math.abs(y2-y1)); }else if(btnstr.equals("圆")) {g.drawOval(Math.min(x1, x2),Math.min(y1,y2),Math.abs(x2-x1),Math.abs(y2-y1));}else if(btnstr.equals("等腰三角形")){drawTrangle(x1,y1,x2,y2);}}
4、进去或者离开,我们没有操作
public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}
接下来,我们就需要来定义在3中 的drawTrangle的方法名了,这个是用来画等腰三角形的
画等腰三角形也只需要两组坐标,x1,y1,x2,y2,顶点的x坐标就是tempx = (x1+x2)/2
public void drawTrangle(int x1,int y1,int x2,int y2) {int tempx = (x1+x2)/2;g.drawLine(x1, y2, x2, y2);g.drawLine(tempx, y1, x1, y2);g.drawLine(tempx, y1, x2, y2);}
接下来,我们就需要回到DrawUI中,为按钮添加动作监听,为界面添加鼠标监听
DrawListener dl = new DrawListener();
btnLine.addActionListener(dl);
btnRect.addActionListener(dl);
btnOval.addActionListener(dl);
btnTragnle.addActionListener(dl);
btn1.addActionListener(dl);
jf.addMouseListener(dl);dl.g = jf.getGraphics();
System.out.println("画笔:"+dl.g);
最后就是定义一个主方法,创建一个属于DrawUI的对象,调用一下initUI这个方法
public static void main(String[] args) {DrawsPad dp = new DrawsPad();dp.ininUI();}
接下来就是效果展示图