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

📄 drawpanel.java

📁 Java实现的常用数据结构算法
💻 JAVA
字号:
package graph;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class DrawPanel extends ShowPanel{
	boolean drawModel=true;
	boolean conceret=true;
	int x1,y1;
    int x2,y2;
    int p1=0,p2=1;
    Vector Points= new Vector();
    Vector Liners=new Vector();
	Controls con=new Controls();
	MouseAdapter adapter;
	GraWriter writer=new GraWriter("Graph");
	public DrawPanel(Graph g){
		super(g);
		this.add(con);
		initAdapter();
		addMouseListener(adapter);
	}
	public void initAdapter(){
		adapter=new MouseAdapter(){
			public void mousePressed(MouseEvent e){
				x1=e.getX();
				y1=e.getY();
				if(drawModel){						
				    	Point v=new Point(x1,y1);	
				    	Points.addElement(v);
				    	conceret=(con.starts.getText()=="1")?false:true;
				    	if(conceret){
				    		p2=Points.indexOf(v);
				    		Liners.addElement(new Point(p1,p2));
							p1=p2;
				    	}
				    	renew();
				        if(Points.size()>30)
				        removeMouseListener(adapter);		
				}else{
					int len=points.length;
					for(int i=0;i<len;i++){
						if((Math.abs(points[i].x-x1)<66)&&(Math.abs(points[i].y-y1)<=6)){
							SelectPoint(points[i]);
							p1=i;
							break;
						}
					}
				}
				
			}
			public void mouseReleased(MouseEvent e){
				 x2=e.getX();
				 y2=e.getY();
				 if(drawModel){				 	
				 }else{
				 	int len=points.length;
					for(int i=0;i<len;i++){
						if((Math.abs(points[i].x-x2)<66)&&(Math.abs(points[i].y-y2)<=6)){
							SelectPoint(points[i]);
							p2=i;
							draw(p1,p2);
							links[p1][p2]=true;
							break;
						}
					}
				 }				 
			}
		};
	}
   public void paint(Graphics g){
   	   if(!drawModel)
   	    super.paint(g); 
   	    else{
   	       int len=Points.size();   	    
	   	    Point v,v1,v2;
			for(int i=0;i<len;i++){
				v=(Point)Points.elementAt(i);
				g.drawOval(v.x-6,v.y-6,12,12);
			}
			len=Liners.size();
			
			for(int i=0;i<len;i++){
				v=(Point)Liners.elementAt(i);
				v1=(Point)Points.elementAt(v.x);
				v2=(Point)Points.elementAt(v.y);
				g.drawLine(v1.x,v1.y,v2.x,v2.y);
			}	
   	    }	      	    
   }
   public void savegraph(){
	    int len=Points.size();
	    graph=new Graph(len);
	    points=new Point[len];
	    links=new boolean[len][len];
	    for(int i=0;i<len;i++){
	    points[i]=(Point)Points.elementAt(i);
        }
	    for(int i=0;i<len;i++){
	    for(int j=0;j<len;j++){
	    	links[i][j]=false;
	    }	
	    }
	    len=Liners.size();
        Point v;
        for(int i=0;i<len;i++){
        v=(Point)Liners.elementAt(i);	
        links[v.x][v.y]=true;
        } 
       graph.setLabels(points);
       graph.setEdges(links);
       save();
       drawModel=true;
      renew();
   }
   public void renew(){
   	  repaint();
   }
   public void save(){
   	writer.save(this);   
   }	
	
 public   class Controls extends Panel {
   	 Button go=new Button("运行");
   	 Button a=new Button("刷新");
   	 Button draw=new Button("画图");
   	 Label sta=new Label("开始点");
   	 Button grink=new Button("保存");
   	 Button link=new Button("连接");
   	 TextField starts=new TextField("0",4);
   	 TextField first=new TextField("0",4);
   	 TextField second=new TextField("0",4);
   	 public Controls(){
   	 	add(sta);
   	 	add(starts);
   	 	add(go);
   	 	add(a); 
   	 	add(draw);
   	 	add(grink);
   	 	add(link);
   	 	add(first);
   	 	add(second); 
   	 	go.addActionListener(new ActionListener(){  	 		
   	 		public void actionPerformed(ActionEvent e){
   	 			//renew();
   	 			int start=Integer.parseInt(starts.getText());
   	 			Algo.dfPrint(graph,start);
   	 		}
   	 		
   	 	});
   	 	a.addActionListener(new ActionListener(){
   	 		public void actionPerformed(ActionEvent e){
   	 		   if(drawModel){
   	 		   	  a.setLabel("删除");
   	 		   	  Points.removeAllElements();
   	 		   	  Liners.removeAllElements();
   	 		   }	renew();
   	 		}
   	 		
   	 	});
   	 	draw.addActionListener(new ActionListener(){
   	 		public void actionPerformed(ActionEvent e){
   	 		     if(drawModel){
   	 		     	draw.setLabel("画图");
   	 		     	a.setLabel("刷新");
   	 		     	sta.setText("开始点");
   	 		     	go.setEnabled(true);
   	 		     	renew();
   	 		     	drawModel=false;
   	 		     }else{
   	 		     	draw.setLabel("搜索");
   	 		     	a.setLabel("删除");
   	 		     	sta.setText("连续?1/0");
   	 		     	go.setEnabled(false);
   	 		     	renew();
   	 		     	drawModel=true;
   	 		     }
   	 		    }});
   	 		grink.addActionListener(new ActionListener(){
   	 		public void actionPerformed(ActionEvent e){
  	 			    savegraph();
   	 			}});
   	 		link.addActionListener(new ActionListener(){
   	 		public void actionPerformed(ActionEvent e){
   	 			int p1=Integer.parseInt(first.getText());
   	 			int p2=Integer.parseInt(second.getText());
   	 			if(!drawModel){
   	 			if(p1<0){
   	 				links[Math.abs(p1)][Math.abs(p2)]=false;
   	 				graph.delEdge(Math.abs(p1),Math.abs(p2));
   	 			}
   	 			else{
   	 			  links[Math.abs(p1)][Math.abs(p2)]=true;
   	 		      graph.addEdge(Math.abs(p1),Math.abs(p2));
   	 			}  	 	  	 				
   	 			}else{
   	 				if(p1<0){
   	 					Points.remove(Math.abs(p1));
   	 				}else
   	 				Points.addElement(new Point(Math.abs(p1),Math.abs(p2)));
   	 			}
   	 					    
   	 			 renew();   
   	 			}});			
   	 }
   }
}


⌨️ 快捷键说明

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