用Java完成图形图像绘制

我们要来图形图像的处理,目标就是滑动鼠标绘制一根直线,绘制一个矩形,绘制一个圆,并且绘制任意的一个三角形,和任意的一个等腰三角形

我们先创建一个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();}

接下来就是效果展示图

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部