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

📄 selectionarea.java

📁 包含了模式识别中常用的一些分类器设计算法
💻 JAVA
字号:
/**  * file: SelectionArea.java * * last editted: Ryan Irwin * */// import necessary java libraries//import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.* ;import java.util.Date;import java.lang.Object ; /** * SelectionArea extend a JPanle and is used to implements the plotting  * area for the data input classes * * hierarchy: JPanel->SelectionArea * */public class SelectionArea extends JPanel {        // *********************************************************************    //    // declare global variables and components    //    // *********************************************************************    static final double ZOOM_SCALE = 1.25;    DataPoints data;                      // data object of points    int width;                      // width of the canvas    int height;                     // height of the canvas    int zeroX;                      // zero position on x axis    int zeroY;                      // zero position on y axis    int pointWidth = 3;             // radius of the outpot points     int xGridDiv = 21;              // plot grid division for the x-axis    int yGridDiv = 21;              // plot grid division for the y-axis    boolean drawFlag = true;       // flag to indicate when to draw    double xmax = 1.0;  // maximum limit of the x-axis    double xmin = -1.0; // minimum limit of the x-axis    double ymax = 1.0;  // maximum limit of the y-axis    double ymin = -1.0; // minimum limit of the y-axis        int flag = 1 ;    // EventQueue event1 = new EventQueue();    // MouseEvent mouse = new MouseEvent();    // AWTEvent e = new AWTEvent();    //Date date = new Date();    Vector<Point> xi = new Vector<Point>(40, 20);    // *********************************************************************    //    // declare class constructors    //    // *********************************************************************       /**     * constructor initializes the input samples to be plotted     *     * @param   d input data samples     *     */    public SelectionArea(DataPoints d)     {        super();	// initialize objects	//        data = d;		// set the background color	//        setBackground(Color.white);	// add an action listener to the input display	//        MyListener myListener = new MyListener();        addMouseListener(myListener);	addMouseMotionListener(myListener);    }        // *********************************************************************    //    // declare class methods    //    // *********************************************************************        /**     *     * class inplememts a mouse listener/motion listener for the input plot     *     * hierarchy: MouseAdapter->MyListener     *     */    class MyListener extends MouseAdapter 	implements MouseListener,MouseMotionListener     {	/**	 * Action to occur when mouse is pressed	 * @param e MouseEvent variable	 */       	public void mousePressed(MouseEvent e )	{	    	    if(SwingUtilities.isRightMouseButton(e)) 	    {		data.selectFlag = 1;		data.selStartX = e.getX();		data.selStartY = e.getY();		data.selEndX = e.getX();		data.selEndY = e.getY();	    }	    if(SwingUtilities.isLeftMouseButton(e))	    {		if (Classify.main_menu_d.drwgaussf)		{		    Point eventPoint = e.getPoint();		    MyPoint mean;		    		    mean = data.convertPoint(eventPoint, 					     getWidth(),  getHeight(), 					     getDisplayScale());		    data.drawGaussian(mean.x, mean.y, getDisplayScale());		    		    repaint();		}		if(Classify.main_menu_d.zoomi)		{	    		    		    Point eventPoint = e.getPoint();		    MyPoint center = data.convertPoint(eventPoint, 						       getWidth(), getHeight(),						       getDisplayScale());		    setDisplayScale(new DisplayScale(				    center.x + (xmax - xmin)/2, 				    center.x - (xmax - xmin)/2,				    center.y + (ymax - ymin)/2,				    center.y - (ymax - ymin)/2));		    setDisplayScale(new DisplayScale(				    MathUtil.setDecimal(xmax/ZOOM_SCALE, 2), 				    MathUtil.setDecimal(xmin/ZOOM_SCALE, 2), 				    MathUtil.setDecimal(ymax/ZOOM_SCALE, 2),				    MathUtil.setDecimal(ymin/ZOOM_SCALE, 2)));		    		    Classify.main_menu_d.zoomi = false;		}		if(Classify.main_menu_d.zoomo)		{		    Point eventPoint = e.getPoint();		    MyPoint center = data.convertPoint(eventPoint, 						       getWidth(), getHeight(),						       getDisplayScale());		    setDisplayScale(new DisplayScale(				    center.x + (xmax - xmin)/2, 				    center.x - (xmax - xmin)/2,				    center.y + (ymax - ymin)/2,				    center.y - (ymax - ymin)/2));		    setDisplayScale(new DisplayScale(				    MathUtil.setDecimal(xmax*ZOOM_SCALE, 2), 				    MathUtil.setDecimal(xmin*ZOOM_SCALE, 2), 				    MathUtil.setDecimal(ymax*ZOOM_SCALE, 2),				    MathUtil.setDecimal(ymin*ZOOM_SCALE, 2)));		    Classify.main_menu_d.zoomo = false;	        }	    }	    flag = 1;	    //   time1 = date.getTime();  	}	/**	 * Action to occur upon a mouse release	 * @param e MouseEvent variable	 */	public void mouseReleased(MouseEvent e )	{	    if(flag == 1)	    {		if(SwingUtilities.isLeftMouseButton(e) && 		   !Classify.main_menu_d.zoomi && !Classify.main_menu_d.zoomo)		{			    		    Point eventPoint = e.getPoint();		    double x_axis = eventPoint.getX();		    double y_axis = eventPoint.getY();		    		    // Classify.pro_box_d.appendMessage(		    //       "x1 = " + x_axis + "  y1 = " + y_axis);		    		    data.addPoint(data.convertPoint(eventPoint, 						    getWidth(), getHeight(), 						    getDisplayScale()));		    // System.out.println("haha" + data.dset1);		    repaint();		    		}	    }	    if(SwingUtilities.isRightMouseButton(e)) 	    {		data.selEndX = e.getX();		data.selEndY = e.getY();		repaint();	    }	}	/**	 * Action to occur upon a mouse drag	 * @param e MouseEvent variable	 */   	public void mouseDragged(MouseEvent e) 	{	    flag = 0;	    if(SwingUtilities.isLeftMouseButton(e) && 	       !Classify.main_menu_d.zoomi && !Classify.main_menu_d.zoomo) 	    {		if (Classify.main_menu_d.drwptsf)		{		    Point eventPoint = e.getPoint();		    xi.addElement(new Point(eventPoint));	   		    if(xi.size() > 1)		    {			if(!(((Point)xi.lastElement()).x ==                            ((Point)xi.elementAt(xi.size()-2)).x))			{			    // System.out.println(eventPoint);			    double x_axis = eventPoint.getX();			    double y_axis = eventPoint.getY();			    			    // Classify.pro_box_d.appendMessage(			    // " x = " + x_axis + "  y = " + y_axis);    			    data.addPoint(data.convertPoint(							 eventPoint, 						         getWidth(), 						         getHeight(), 						         getDisplayScale()));			    repaint();			}		    }		    else		    {			// System.out.println("Test");			double x_axis = eventPoint.getX();			double y_axis = eventPoint.getY();						// Classify.pro_box_d.appendMessage(			// " x = " + x_axis + "  y = " + y_axis); 			// System.out.println(eventPoint);			data.addPoint(data.convertPoint(eventPoint, 							getWidth(),							getHeight(), 							getDisplayScale()));			repaint();		    }		}		if (Classify.main_menu_d.drwgaussf)	        {					    Point eventPoint = e.getPoint();		    MyPoint mean;		    		    mean = data.convertPoint(eventPoint, 					     getWidth(), 					     getHeight(), 					     getDisplayScale());		    data.drawGaussian(mean.x, mean.y, getDisplayScale());		    repaint();		}	    }	    if(SwingUtilities.isRightMouseButton(e)) 	    {		data.selEndX = e.getX();		data.selEndY = e.getY();		repaint();	    }        }	/**	 * Action to occur upon a mouse move	 * @param e MouseEvent variable	 */        public void mouseMoved(MouseEvent e) 	{	    // this method is required to be present        }	/**	 * Action to occur upon a mouse exit	 * @param e MouseEvent variable	 */	        public void mouseExited(MouseEvent e) 	{	    // this method is required to be present        }		/**	 * Action to occur upon a mouse enter	 * @param e MouseEvent variable	 */        public void mouseEntered(MouseEvent e) 	{	    // this method is required to be present        }    }        /**     * Method paints the selection area     *     * @param   g Graphics object used     *     */    public void paintComponent(Graphics g)     {		super.paintComponent(g);		// local variables	//	DrawGrid(g);		// draw all input points	//	Classify.drawPoints(g, 			    data.convertMyPoints(data.dset1, 						 getWidth(), 						 getHeight(), 						 getDisplayScale()), 			    Classify.PTYPE_INPUT, data.color_dset1);	Classify.drawPoints(g, 			    data.convertMyPoints(data.dset2, 						 getWidth(), 						 getHeight(), 						 getDisplayScale()), 			    Classify.PTYPE_INPUT, data.color_dset2);	Classify.drawPoints(g, 			    data.convertMyPoints(data.dset3, 						 getWidth(), 						 getHeight(), 						 getDisplayScale()), 			    Classify.PTYPE_INPUT, data.color_dset3);	Classify.drawPoints(g, 			    data.convertMyPoints(data.dset4, 						 getWidth(), 						 getHeight(), 						 getDisplayScale()), 			    Classify.PTYPE_INPUT, data.color_dset4);		// draw selected area	//	if (data.selectFlag != 0) 	{	    g.setColor(Color.darkGray);	    g.drawLine(data.selStartX, data.selStartY, 		       data.selStartX, data.selEndY);	    g.drawLine(data.selEndX, data.selStartY, 		       data.selEndX, data.selEndY);	    g.drawLine(data.selStartX, data.selStartY, 		       data.selEndX, data.selStartY);	    g.drawLine(data.selStartX, data.selEndY, 		       data.selEndX, data.selEndY);	}    }        /**     * Clears data sets     */    public void clear()     {	data.dset1.clear();	data.dset2.clear();	data.dset3.clear();	data.dset4.clear();    }        /**     * Gets the canvas width     *     * @return  the canvas width     *     */    public int getCanvasWidth()     {	return width;    }    /**     * Gets the canvas height     *     * @return  the canvas height     *     */    public int getCanvasHeight()     {	return height;    }    /**     * Determines the dimensions of the selection area     *     */    public void DetermineDimensions()     {	Dimension dimen = this.getSize();	width = dimen.width;	height = dimen.height;	// divide by 2	//	zeroX = width >> 1;	zeroY = height >> 1;    }    /**     * Draws the selection area grid lines     * @param g Graphics object to use      */      public void DrawGrid(Graphics g)     {		// determine the dimensions of the drawing canvas	//		DetermineDimensions();	// draw minor grid in light gray	// start from center and draw in each direction	//	g.setColor(Color.gray);		g.drawLine(0, zeroY, width, zeroY);	g.drawLine(zeroX, 0, zeroX, height);		g.setColor(Color.lightGray);		for(int i = zeroY + yGridDiv; i < height; i+= yGridDiv) 	    g.drawLine(0, i, width, i);		for(int i=zeroY - yGridDiv; i >= 0; i -= yGridDiv) 	    g.drawLine(0, i, width, i);		for(int i = zeroX + xGridDiv; i < width; i+= xGridDiv) 	    g.drawLine(i, 0, i, height);		for(int i = zeroX - xGridDiv; i >= 0 ; i-= xGridDiv) 	    g.drawLine(i, 0, i, height);       	// declare the axis label fonts	//	Font currentFont = getFont();	Font newFont = new Font(currentFont.getName(), 				currentFont.getStyle(), 10);		// set the asix label font and color	//	g.setFont(newFont);	g.setColor(Color.black);	// initialize the labels	//	String xmin = new String("" + this.xmin);	String xmax = new String("" + this.xmax);	String ymin = new String("" + this.ymin);	String ymax = new String("" + this.ymax);	// add the labels to the x-axis and y-axis	//	g.drawString(ymax, zeroX + 3, 12);	g.drawString(ymin, zeroX + 3, height - 3);	g.drawString(xmin, 3, zeroY + 12);	g.drawString(xmax, width - 24, zeroY + 12);    }    /**     * Gets the DisplayScale     *     * @return  DisplayScale of object     *     */    public DisplayScale getDisplayScale()    {	return new DisplayScale(xmax, xmin, ymax, ymin);    }    /**     * Sets the DisplayScale     *     * @param   scale DisplayScale to set     */    public void setDisplayScale(DisplayScale scale)    {	xmax = scale.xmax;	xmin = scale.xmin;	ymax = scale.ymax;	ymin = scale.ymin;	repaint();    }}

⌨️ 快捷键说明

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