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

📄 workarea.java

📁 这是一个从音频信号里提取特征参量的程序
💻 JAVA
字号:
// file: WorkArea.java//// import java packages//import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;import javax.swing.event.*;import java.util.*;import java.io.*;import java.lang.*;import java.awt.geom.*;public class WorkArea extends JPanel {    // ---------------------------------------------------    //    // declare class member data    //    // ---------------------------------------------------    // declare a vector of all elements in the graph    //    public int workAreaWidth = CData.WORKAREA_WIDTH;    public int workAreaHeight = CData.WORKAREA_HEIGHT;    // declare an instance of the directed graph    //    public DiGraph digraph_d = null;    // ---------------------------------------------------    //    // declare class constructors    //    // ---------------------------------------------------    /**     * add the vertex to the work area     *      * @param vertex_a      * @param point_a      * @return void     */    public void insertAll() {	if ( digraph_d == null ){	    return;	}		// remove all components	//	removeAll();		// add vertices	//	for (int i = 0 ; i < digraph_d.vertices_d.size(); i ++ ){	    Vertex curr_vertex = (Vertex) digraph_d.vertices_d.get(i);	    //insertVertexAt(curr_vertex, curr_vertex.getVertexLocation());	    insertVertexAt(curr_vertex, curr_vertex.getLocation());	    //add(curr_vertex);	}		    }    // method: WorkArea    //    // arguments: none    // returns  : none    //    public WorkArea() {	// invoke the super constructor	//	super();	// invalidate the default layout	//	this.setLayout(null);	// set the default background color of the panel	//	this.setBackground(Color.white);    }    /**     * add the vertex to the work area     *      * @param vertex_a      * @param point_a      * @return void     */    public void insertVertex(Vertex vertex_a, Point point_a) {	Point location = new Point();	 	// retrieve the vertex dimensions	//	int vertexWidth = vertex_a.getVertexWidth();	int vertexHeight = vertex_a.getVertexHeight();		// center the vertex around the mouse cursor	//	location.x = point_a.x - (vertexWidth / 2);	location.y = point_a.y - (vertexHeight / 2);	vertex_a.setLocation(location);		    	add(vertex_a);	    }    /**     * add the vertex to the work area     *      * @param vertex_a      * @param point_a      * @return void     */    public void insertVertexAt(Vertex vertex_a, Point point_a) {	vertex_a.setLocation(point_a);	add(vertex_a);	    }    /**     * add the vertex to the work area     *      * @param vertex_a      * @param point_a      * @return void     */    public void insertVertex(Vertex vertex_a) {		    	add(vertex_a);	    }    // ---------------------------------------------------    //    // declare class methods    //    // ---------------------------------------------------    // method: getAreaWidth    //    // arguments: none    // return: none    //    // retrieves the width of the work area    //    public int getAreaWidth() {	// return the width	//	return workAreaWidth;    }    // method: getAreaHeight    //    // arguments: none    // return: none    //    // retrieves the height of the work area    //    public int getAreaHeight() {	// return the height	//	return workAreaHeight;    }    // method: setWidth    //    // arguments:     //    int width: (input) width of the work area    // return   : none    //    // sets the width of the work area    //    public void setWidth(int width) {	// set the width	//	workAreaWidth = width;    }    // method: setHeight    //    // arguments:    //    int width: (input) width of the work area    // return: none    //    // sets the height of the work area    //    public void setHeight(int height) {	// set the height	//	workAreaHeight = height;    }    // method: setDiGraph    //    // arguments:    //    int width: (input) width of the work area    // return: none    //    // sets the height of the work area    //    public void setDiGraph(DiGraph digraph_a) {	// set the height	//	digraph_d = digraph_a;    }    // ---------------------------------------------------    //    // class required methods    //    // ---------------------------------------------------    // method: paintComponent    //    // arguments:    //    Graphics g: (input) graphics object    // return   : none    //    // paint the current data points and if needed the decision regions    //    public void paintComponent(Graphics g_a) {	// declare local variables	//	int x1 = 0;	int x2 = 0;	int y1 = 0;	int y2 = 0;		int x21 =0;	int y21 =0;	Vertex parent = null;	Vertex child = null;	Vector children = null;	boolean is_self_arc = false;	boolean is_arc = false;	// check the menu again	//	CData.main_frame_d.checkMenu();	// invoke the super constructor	//        super.paintComponent(g_a);		/*	// set all vertices to be invisible	//	for ( int i = 0; i < CData.search_levels_d.size(); i++ ){	    SearchLevel curr_level = 		(SearchLevel) CData.search_levels_d.get(i);	    for ( int j = 0 ; j < curr_level.graph_names_d.size(); j++ ){		DiGraph curr_graph = (DiGraph)		    curr_level.graphs_d.get(curr_level.graph_names_d.get(j));		curr_graph.hideVertices();	    }	}	*/	Graphics2D g = (Graphics2D)g_a;	// do nothing if current digraph is null	//	if (digraph_d == null )	    return;	// show all the vertices	//	digraph_d.showVertices();	// highlight the current vertex focus	//	if (CData.event_handler_d.curr_vertex_focus_d != null) {	    //g.clearRect(0, 0, CData.WORKAREA_WIDTH, CData.WORKAREA_HEIGHT);	    g.setColor(Color.blue);	    Rectangle bounds = 		CData.event_handler_d.curr_vertex_focus_d.getBounds();	    g.drawRect(bounds.x - CData.HIGHLIGHT_WIDTH, 		       bounds.y - CData.HIGHLIGHT_WIDTH, 		       bounds.width + CData.HIGHLIGHT_WIDTH, 		       bounds.height + CData.HIGHLIGHT_WIDTH);	    g.setColor(Color.black);	}	// iterate through all arcs in the graph	//	for (int p=0; p < digraph_d.arcs_d.size(); p++) {	    	    is_self_arc = false;	    int indexs = 0; 	    GraphArc curr_arc =  (GraphArc)digraph_d.arcs_d.get(p);	    Vertex from_vertex = curr_arc.from_d;	    Vertex to_vertex = curr_arc.to_d;	    Point loc1 = from_vertex.getLocation();	    Point loc2 = to_vertex.getLocation();	    	    // determine the co-ordinates of the from_vertex	    //	    x1 = loc1.x + (from_vertex.getVertexWidth() / 2);	    y1 = loc1.y + (from_vertex.getVertexHeight() / 2);	      	    String wei = curr_arc.weights_d;	    boolean epi = curr_arc.epsilon_d;	    if ( curr_arc == CData.event_handler_d.curr_arc_focus_d){		g.setColor(Color.blue);	    }	    else{		g.setColor(Color.black);	    }	    // if this arc is a self arc	    //	    if(curr_arc.isSelfArc() ) {		g.drawArc(loc1.x + 12, 			  loc1.y - from_vertex.getVertexWidth()/2 + 12, 			  from_vertex.getVertexWidth() - 24, 			  from_vertex.getVertexWidth() - 24, 			  0, 180);	    		g.drawArc(loc1.x + 13, 			  loc1.y - from_vertex.getVertexWidth()/2 + 13, 			  from_vertex.getVertexWidth() - 26, 			  from_vertex.getVertexWidth() - 26, 			  0, 180);	    		int xtip1 = loc1.x + 12;		int ytip1 = loc1.y + 12 - 4;		int xleft1 = loc1.x + 12 - 7/2;		int yleft1 = loc1.y  - 1;		int xright1 = loc1.x + 12 + 7/2;		int yright1 = loc1.y -1 ;				int x0Pts[] = {xtip1, xright1, xleft1, xtip1};		int y0Pts[] = {ytip1, yright1, yleft1, ytip1};				// g.setColor(Color.red);		g.fillPolygon(x0Pts, y0Pts, x0Pts.length);	    		// set x and y location		//		curr_arc.xloc_d = loc1.x + 12;		curr_arc.yloc_d = loc1.y - 		    from_vertex.getVertexWidth()/2 + 12 ;				// set the width and height		//		curr_arc.width_d = from_vertex.getVertexWidth() - 24;		curr_arc.height_d = (from_vertex.getVertexWidth() - 24)/2;		g.setFont(CData.ARC_FONT);				// if it is not a epsilon transition		//		if( ! epi ) {		    g.drawString(""+ wei, 				 loc1.x + from_vertex.getVertexWidth()/2,				 loc1.y - from_vertex.getVertexWidth()/2 + 11);		}		else {		    g.drawString(""+ "epi", 				 loc1.x + from_vertex.getVertexWidth()/2,				 loc1.y - from_vertex.getVertexWidth()/2 + 11);		}		g.setFont(CData.ARIAL_FONT);	    }	    // this arc is not a self loop	    //	    else{		// determine the up-down co-ordinates of the to_vertex 		//		double delta = (double)to_vertex.getVertexWidth() / 		    (double)(to_vertex.getInDegree() + 1);		int index = to_vertex.parents_d.indexOf(from_vertex) + 2;		x2 = loc2.x + (int)(delta * index);		y2 = loc2.y + (to_vertex.getVertexHeight() / 2);	      		// determine the four destination points on the vertex 		//		int xpnt1 = x2;		int ypnt1 = y2 - (to_vertex.getVertexHeight() / 2) 		    - CData.VERTEX_MARGIN;		int xpnt2 = x2;		int ypnt2 = y2 + (to_vertex.getVertexHeight() / 2) 		    + CData.VERTEX_MARGIN;	      		// determine the left-right co-ordinates of the to_vertex		//		double delta1 = (double)to_vertex.getVertexHeight() / 		    (double)(to_vertex.getInDegree() + 1);		int index2 = to_vertex.parents_d.indexOf(from_vertex) + 2;		x21 = loc2.x + (to_vertex.getVertexWidth() / 2);		y21 = loc2.y + (int)(delta1 * index2);	      		// determine the four destination points on the vertex 		//		int xpnt3 = x21 - (to_vertex.getVertexWidth() / 2) 		    - CData.VERTEX_MARGIN;		int ypnt3 = y21;		int xpnt4 = x21 + (to_vertex.getVertexWidth() / 2) 		    + CData.VERTEX_MARGIN;		int ypnt4 = y21;				// determine the closest destination to the from_vertex		//		int destVal = -1;		double currMax = 0.0;		double maxDist = Double.MAX_VALUE;				// determine the distance to the first point		//		currMax = Math.abs(CData.distance(x1, y1, xpnt1, ypnt1));		if (currMax < maxDist) {		    destVal = 1;		    maxDist = currMax;					}				// determine the distance to the second point		//		currMax = Math.abs(CData.distance(x1, y1, xpnt2, ypnt2));		if (currMax < maxDist) {		    destVal = 2;		    maxDist = currMax;					}				// determine the distance to the third point		//		currMax = Math.abs(CData.distance(x1, y1, xpnt3, ypnt3));		if (currMax < maxDist) {		    destVal = 3;		    maxDist = currMax;					}				// determine the distance to the fourth point		//		currMax = Math.abs(CData.distance(x1, y1, xpnt4, ypnt4));		if (currMax < maxDist) {		    destVal = 4;		    maxDist = currMax;					}		// draw a directed arc form the from_vertex to the to_vertex		//		if (destVal == 1) {		    x2 = xpnt1;		    y2 = ypnt1;		} 		else if(destVal == 2){		    x2 = xpnt2;		    y2 = ypnt2;		}		else if(destVal == 3){		    x2 = xpnt3;		    y2 = ypnt3;		}		else {		    x2 = xpnt4;		    y2 = ypnt4;		}		// draw a line connecting the from_vertex and to_vertex		//		g.drawLine(x1, y1-1, x2, y2-1);		g.drawLine(x1-1, y1, x2-1, y2);		g.drawLine(x1, y1, x2, y2);		// draw a directed arrow head from from_vertex to to_vertex		//		int dy = y2 - y1;		int dx = x2 - x1;		int ARROW_SIZE = 6;				double dist = CData.distance(x1, y1, x2, y2);		dist = dist == 0 ? 1 : dist;				double medianx = x2 - dx * ARROW_SIZE / dist;		double mediany = y2 - dy * ARROW_SIZE / dist;		    		int base1x = (int)(medianx - dy * 				   ( ARROW_SIZE / 2 ) / dist);		int base1y = (int)(mediany + dx * 				   ( ARROW_SIZE / 2 ) / dist);					int base2x = (int)(medianx + dy * 				   ( ARROW_SIZE / 2 ) / dist);		int base2y = (int)(mediany - dx * 				   ( ARROW_SIZE / 2 ) / dist);				int xPts[] = {x2, base1x, base2x, x2};		int yPts[] = {y2, base1y, base2y, y2};		g.fillPolygon(xPts, yPts, xPts.length); 	   		// set x and y location		//		curr_arc.xloc_d = x1;		curr_arc.yloc_d = y1;				// set the width and height		//		curr_arc.width_d = x2;		curr_arc.height_d = y2;		g.setFont(CData.ARC_FONT);				// draw the weights		//		if( ! epi ) {		    g.drawString(""+ wei, (x1 + x2) /2 - 4, (y1 + y2) /2 - 				 3 );		}		else {		    g.drawString(""+ "epi", (x1 + x2) /2 - 4, (y1 + y2) /2 - 				 3 );		}		g.setFont(CData.ARIAL_FONT);	    } // end of else if this is not a self loop	} // end of for loop for all arcs	setPreferredSize(new Dimension(6000, 10000));	    } }//// end of file

⌨️ 快捷键说明

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