`
欧阳晓
  • 浏览: 44681 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

橡皮筋绘画技术

阅读更多

             今天上课C++老师在说异或位运算的时候,他提到了橡皮筋绘画技术:当你按下鼠标时然后拖动鼠标可以随意改变线的方向,在没有这个技术之前必须将原来的线擦掉这样会导致一些图形交点处被擦掉。它为制图业做出了很大的贡献,于是,觉得它很有意思。但是,c++实现比较难,我就试着用java实现。

              流程:获得鼠标点下的坐标,拖动鼠标的坐标,最后是释放鼠标时画出线

              代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

/**
 * 创建一个橡皮筋划线类
 * 
 * @author Administrator
 * 
 */
public class DrawLine extends JFrame {
	private int startX, startY, endX, endY;
	private Graphics g;
	private Image img;

	public DrawLine() {
		// 添加鼠标移动监听
		this.addMouseMotionListener(new MouseMotionAdapter() {
			public void mouseDragged(MouseEvent me) {
				endX = me.getX();
				endY = me.getY();
				repaint();
			}
		});
		// 添加鼠标事件监听
		this.addMouseListener(new MouseAdapter() {
			public void mousePressed(MouseEvent me) {
				startX = me.getX();
				startY = me.getY();
			}

			public void mouseReleased(MouseEvent arg0) {
				g.drawLine(startX, startY, endX, endY);// 加一条直线至内存Graphics
			}
		});
		this.setBounds(200, 200, 300, 300);
		this.setLocationRelativeTo(null);
		this.setVisible(true);
		this.setDefaultCloseOperation(3);
		img = createImage(getSize().width, getSize().height);
		g = img.getGraphics();
	}

	/**
	 * 划线方法
	 */
	public void paint(Graphics g) {
		super.paint(g);
		g.drawImage(img, 0, 0, this);// 先把之前保存在内存的Image画上
		g.drawLine(startX, startY, endX, endY);
	}

	public static void main(String[] args) {
		new DrawLine();
	}
}

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics