⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drawline.java

📁 java写的画图程序
💻 JAVA
字号:
package line;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.FlowLayout;
import javax.swing.JButton;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.Point;

public class DrawLine extends JFrame{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -5195355608331797606L;
	private UCanvas canvas;
	private Dimension size=new Dimension(400,400);
	public DrawLine() {
		super("绘制直线");
		getContentPane().setLayout(new BorderLayout());

		final JPanel panel = new JPanel();
		final FlowLayout flowLayout = new FlowLayout();
		flowLayout.setAlignment(FlowLayout.RIGHT);
		panel.setLayout(flowLayout);
		getContentPane().add(panel, BorderLayout.SOUTH);

		final JButton ddaButton = new JButton();
		ddaButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				canvas.setDDAType();
				canvas.repaint();
				
			}
		});
		ddaButton.setText("DDA");
		panel.add(ddaButton);

		final JButton bresenhamButton = new JButton();
		bresenhamButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				canvas.setBresenhamType();
				canvas.repaint();
				
			}
		});
		bresenhamButton.setText("Bresenham");
		panel.add(bresenhamButton);

		final JPanel mainPanel = new JPanel();

		
	
		mainPanel.setLayout(new BorderLayout());
		getContentPane().add(mainPanel, BorderLayout.CENTER);
		canvas=new UCanvas();
		mainPanel.add(canvas);

		
		
		this.setSize(size);
		this.setLocation((int)((Toolkit.getDefaultToolkit().getScreenSize().width-size.width)/2),(int)((Toolkit.getDefaultToolkit().getScreenSize().height-size.height)/2));
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}

	class UCanvas extends Canvas{
		
		/**
		 * 
		 */
		private static final long serialVersionUID = 9214273591307628106L;
		final public static int DDA_TYPE=0;
		final public static int BRESENHAM_TYPE=1;
		
		Point p1,p2;
		
		
		private int type;
		
		public UCanvas(){			
			this(0);
		}
		
		public UCanvas(int t){			
			type=t;
			p1=new Point(30,30);
			p2=new Point(100,100);
			
			this.addMouseListener(new MouseAdapter(){
				
				public void mouseClicked(MouseEvent e){
					p1=new Point(e.getX(),e.getY());
					UCanvas.this.getGraphics().drawRect(p1.x, p1.y, 1, 1);
				}
				
			});
			this.addMouseMotionListener(new MouseMotionAdapter() {
				public void mouseDragged(MouseEvent e) {
					
					p2=new Point(e.getX(),e.getY());
					repaint();
				}
			});
			
			
			this.setBackground(Color.white);
		}
		
		public void paint(Graphics g){
			
			if(type==DDA_TYPE){
	            g.drawString("DDA直线 拖动鼠标可以改变位置", 10, 20);		
				DDA(p1.x,p1.y,p2.x,p2.y,g);
				}
			else if(type==BRESENHAM_TYPE){
			    g.drawString("Bresenham直线 拖动鼠标可以改变位置", 10, 20);		
				Bresenham(p1.x,p1.y,p2.x,p2.y,g);
			}
		}
		
		public void DDA(int x1,int y1,int x2,int y2,Graphics g){
			
			float add_x,add_y,x,y;
			int dx, dy,steps;
			dx=x2-x1;
			dy=y2-y1;
			if(Math.abs(dx)>Math.abs(dy))
				steps=Math.abs(dx);
			else
				steps=Math.abs(dy);
			add_x=(float)dx/steps;
			add_y=(float)dy/steps;
	        x=x1;y=y1;
			
			g.drawRect((int)x, (int)y, 0, 0);
			
			for(int i=1;i<steps;i++){
				x+=add_x;
				y+=add_y;
				g.drawRect((int)(x+0.5), (int)(y+0.5), 0, 0);
			}
		}
		
		public void Bresenham(int x1,int y1,int x2,int y2,Graphics g){
			int dx,dy,x,y;
			int p;
			int const1,const2;
			int inc;
			int tmp;
			dx=x2-x1;
			dy=y2-y1;
			if(dx*dy>=0)
				inc=1;
			else
	            inc=-1;
			if(Math.abs(dx)>Math.abs(dy)){
			  if(dx<0){
				tmp=x1;
				x1=x2;
				x2=tmp;
				tmp=y1;
				y1=y2;
				y2=tmp;
				dx=-dx;
				dy=-dy;
			  }
			  const1=dy<<1;
			  p=const1-dx;
			  const2=(dy-dx)<<1;
			  
			  x=x1;y=y1;
			  
			
			  while(x<x2){
				  
				  x++;
				  if(p<0)
					  p+=const1;
				  else{
					  y+=inc;
					  p+=const2;
				  }
				  g.drawRect(x, y, 0, 0);	  
			  }
				
			}else{
				
				if(dy<0){
					tmp=x1;
					x1=x2;
					x2=tmp;
					tmp=y1;
					y1=y2;
					y2=tmp;
					dx=-dx;
					dy=-dy;
				  }
				  const1=dx<<1;
				  p=dx-const1;
				  const2=(dx-dy)<<1;
				  
				  x=x1;y=y1;
			
				  
				  while(y<y2){
					  
					  y++;
					  if(p<0)
						  p+=const1;
					  else{
						  x+=inc;
						  p+=const2;
					  }
					  g.drawRect(x, y, 0, 0);	  
				  }
				
				
			}
			
		}
		public void setDDAType(){
			type=0;
			
		}
		public void setBresenhamType(){
			type=1;
		}
	}


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


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -