📄 selectionarea.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 + -