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

📄 drawcircle.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 DrawCircle extends JFrame{
 
 private UCanvas canvas;
 private Dimension size=new Dimension(400,400);
 public DrawCircle() {
  super("绘制圆");
  getContentPane().setLayout(new BorderLayout());

 

  final JPanel mainPanel = new JPanel();

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

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

  final JButton button = new JButton();
  button.addActionListener(new ActionListener() {
  	public void actionPerformed(ActionEvent e) {
  		
  		canvas.setAddType();
  		canvas.repaint();
  	}
  });
  button.setText("逐点比较插补");
  panel.add(button);

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

  
  
  
  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{
  
  final public static int DDA_TYPE=0;
  final public static int BRESENHAM_TYPE=1;
  
  Point p1;
  int r;
  int type;
  public UCanvas(){   
   this(0);
  }
  
  public UCanvas(int t){
   type=t;
   p1=new Point(150,150);
   r=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) {
           r=Math.abs(e.getX()-p1.x);
           repaint();
    }
   });
   
   
   this.setBackground(Color.white);
  }
  
  public void paint(Graphics g){ 
	 if(type==BRESENHAM_TYPE){
		 
	  g.drawString("Bresenham圆 拖动鼠标可以改变位置", 10, 20);			 
      bresenhamCircle(p1.x,p1.y,r,g);
      
	 } else if(type==DDA_TYPE){
		  g.drawString("逐点比较插补圆 拖动鼠标可以改变位置", 10, 20);		
		 stepDrawCircle(p1.x,p1.y,r,g);
	 }

  }
  
  
  public void bresenhamCircle(int x1,int y1,int r,Graphics g){
   
   int x,y;
   int e;
   x=0;
   y=r;
   e=3-r<<2;
  
   while(x<=y){
    addCirclePoints(x1, y1, x, y,g);
    if(e<0)
       e+=(x<<2)+6;
    else{
     e+=((x-y)<<2)+10;
     y--;
    }
    
    x++;
   
   }
  }
  

  
  public void stepDrawCircle(int x1,int y1,int r,Graphics g){
   int x=r;
   int y=0;
   int steps=r;
   int e=0;
   

     while(steps-->0){
      
      if(e<0){
       y++;      
       e+=(y<<1)+1;
      }else{
       x--;    
       e+=1-(x<<1);       
      }

      addCirclePoints(x1,y1,x, y,g);    
     }
   
     
 	
  }
  
  private void addCirclePoints(int xc,int yc,int x,int y,Graphics g){
	   g.drawRect(xc+x,yc+y, 0, 0);
	   g.drawRect(xc-x,yc+y, 0, 0);
	   g.drawRect(xc+x,yc-y, 0, 0);
	   g.drawRect(xc-x,yc-y, 0, 0);
	   g.drawRect(xc+y,yc+x, 0, 0);
	   g.drawRect(xc-y,yc+x, 0, 0);
	   g.drawRect(xc+y,yc-x, 0, 0);
	   g.drawRect(xc-y,yc-x, 0, 0);
	  }
  
  public void setAddType(){
		type=0;
		
	}
	public void setBresenhamType(){
		type=1;
	}
 
  
  
 }
 
 public static void main(String args[]){
  
  new DrawCircle();
  
 }
}

⌨️ 快捷键说明

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