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

📄 matrixpanel.java

📁 一个数据挖掘软件ALPHAMINERR的整个过程的JAVA版源代码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
	System.exit(-1);
      }
    } catch(IOException ex) { ex.printStackTrace(); System.exit(-1); }
     
    final MatrixPanel mp = new MatrixPanel();
    mp.setInstances(data);
    setBt.addActionListener( new ActionListener() {
	public void actionPerformed(ActionEvent e) {
	  JFileChooser chooser = new JFileChooser(new java.io.File(System.getProperty("user.dir")));
	  ExtensionFileFilter myfilter = new ExtensionFileFilter("arff", "Arff data files");
	  chooser.setFileFilter(myfilter);
	  int returnVal = chooser.showOpenDialog(jf);
		  
	  if(returnVal == JFileChooser.APPROVE_OPTION)
	    {
	      try{
		System.out.println("You chose to open this file: " +chooser.getSelectedFile().getName());
		Instances in = new Instances ( new FileReader(chooser.getSelectedFile().getAbsolutePath()) );
		mp.setInstances(in);
	      }
	      catch(Exception ex) { ex.printStackTrace(); }
	    }
	}
      });
    //System.out.println("Loaded: "+args[0]+"\nRelation: "+data.relationName()+"\nAttributes: "+data.numAttributes());
    //System.out.println("The attributes are: ");
    //for(int i=0; i<data.numAttributes(); i++)
    //  System.out.println(data.attribute(i).name());

    //RepaintManager.currentManager(jf.getRootPane()).setDoubleBufferingEnabled(false);
    jf.getContentPane().setLayout( new BorderLayout() );
    jf.getContentPane().add(mp, BorderLayout.CENTER);
    jf.getContentPane().add(setBt, BorderLayout.SOUTH);
    jf.getContentPane().setFont( new java.awt.Font( "SansSerif", java.awt.Font.PLAIN, 11) );
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setSize(800, 600);
    jf.setVisible(true);
    jf.repaint();
  }




  /**
     Internal class responsible for displaying the actual matrix
     Requires the internal data fields of the parent class to be properly initialized
     before being created
  */
  private class Plot extends JPanel implements MouseMotionListener, MouseListener {

    int extpad=3, intpad=4, cellSize=100, cellRange=100, lastx=0, lasty=0, jitter=0;
    java.awt.Rectangle r;
    java.awt.FontMetrics fm;
    int lastxpos, lastypos;
    JPanel jPlColHeader, jPlRowHeader;


    /** Constructor 
     */
    public Plot() {
      super();
      this.setToolTipText("blah");
      this.addMouseMotionListener( this );
      this.addMouseListener( this );
      initialize();
    }

    /** Initializes the internal fields */
    public void initialize() {
      lastxpos = lastypos = 0;	  
      cellRange = cellSize; cellSize = cellRange + 2*intpad;

      jPlColHeader = new JPanel() {
	      java.awt.Rectangle r;     
	      public void paint(Graphics g) {
		  r = g.getClipBounds();
		  g.clearRect(r.x, r.y, r.width, r.height);
		  g.setFont( f );
		  fm = g.getFontMetrics();
		  int xpos = 0, ypos = 0, attribWidth=0;
		  
		  g.setColor(fontColor);
		  xpos = extpad;
		  ypos=extpad+fm.getHeight();

		  for(int i=0; i<m_selectedAttribs.length; i++) {
		      if( xpos+cellSize < r.x)
			  { xpos += cellSize+extpad; continue; }
		      else if(xpos > r.x+r.width)
			  { break; }
		      else {
			  attribWidth = fm.stringWidth(m_data.attribute(m_selectedAttribs[i]).name());
			  g.drawString(m_data.attribute(m_selectedAttribs[i]).name(), 
				       (attribWidth<cellSize) ? (xpos + (cellSize/2 - attribWidth/2)):xpos, 
				       ypos);
		      }
		      xpos += cellSize+extpad;
		  }
		  fm = null; r=null;
	      }
	      
	      public Dimension getPreferredSize() {
		  fm = this.getFontMetrics(this.getFont());
		  return new Dimension( m_selectedAttribs.length*(cellSize+extpad),
						       2*extpad + fm.getHeight() );
	      }
	  };

      jPlRowHeader = new JPanel() {
	      java.awt.Rectangle r; 	      
	      public void paint(Graphics g) {
		  r = g.getClipBounds();
		  g.clearRect(r.x, r.y, r.width, r.height);
		  g.setFont( f );
		  fm = g.getFontMetrics();
		  int xpos = 0, ypos = 0, attribWidth=0;
		  
		  g.setColor(fontColor);
		  xpos = extpad;
		  ypos=extpad; 
		  
		  for(int j=m_selectedAttribs.length-1; j>=0; j--) {
		      if( ypos+cellSize < r.y )
			  { ypos += cellSize+extpad;  continue; }
		      else if( ypos > r.y+r.height )
			  break;
		      else {
			  g.drawString(m_data.attribute(m_selectedAttribs[j]).name(), xpos+extpad, ypos+cellSize/2);
		      }
		      xpos = extpad;
		      ypos += cellSize+extpad;
		  }		 
		  r=null; 
	      }
	      
	      public Dimension getPreferredSize() {
		  return new Dimension( 100+extpad,
					m_selectedAttribs.length*(cellSize+extpad)
					);
	      }
	  };      
      jPlColHeader.setFont(f);
      jPlRowHeader.setFont(f);
      this.setFont(f);
    }      

    public JPanel getRowHeader() {
	  return jPlRowHeader;
    }

    public JPanel getColHeader() {
	return jPlColHeader;
    }

    public void mouseMoved(MouseEvent e) {
      Graphics g = this.getGraphics();
      int xpos=extpad, ypos=extpad;

      for(int j=m_selectedAttribs.length-1; j>=0; j--) {
	for(int i=0; i<m_selectedAttribs.length; i++) {
	  if(e.getX()>=xpos && e.getX()<=xpos+cellSize+extpad)
	    if(e.getY()>=ypos && e.getY()<=ypos+cellSize+extpad) {
	      if(xpos!=lastxpos || ypos!=lastypos) {
		g.setColor( Color.red );
		g.drawRect(xpos-1, ypos-1, cellSize+1, cellSize+1);
		if(lastxpos!=0 && lastypos!=0) {
		  g.setColor( this.getBackground().darker() );
		  g.drawRect(lastxpos-1, lastypos-1, cellSize+1, cellSize+1); }
		lastxpos = xpos; lastypos = ypos;
	      }
	      return;
	    }
	  xpos+=cellSize+extpad;
	}
	xpos=extpad;
	ypos+=cellSize+extpad;
      }
      if(lastxpos!=0 && lastypos!=0) {
	g.setColor( this.getBackground().darker() );
	g.drawRect(lastxpos-1, lastypos-1, cellSize+1, cellSize+1); }
      lastxpos=lastypos=0;
    }

    public void mouseDragged(MouseEvent e){ }

    public void mouseClicked(MouseEvent e) {
    	
    	if (e.getClickCount()!=2)
    		return;
    		
      int i=0, j=0, found=0;
	  
      int xpos=extpad, ypos=extpad;
      for(j=m_selectedAttribs.length-1; j>=0; j--) {
	for(i=0; i<m_selectedAttribs.length; i++) {
	  if(e.getX()>=xpos && e.getX()<=xpos+cellSize+extpad)
	    if(e.getY()>=ypos && e.getY()<=ypos+cellSize+extpad) {
	      found=1; break;
	    }
	  xpos+=cellSize+extpad;
	}
	if(found==1)
	  break;
	xpos=extpad;
	ypos+=cellSize+extpad;
      }
      if(found==0)
	return;

      //JFrame jf = new JFrame("Weka Explorer: Visualizing "+m_data.relationName() );
	  JFrame jf = new JFrame(Resource.srcStr("Visualizingrelation")+" "+m_data.relationName() );
      VisualizePanel vp = new VisualizePanel();
      try {
	PlotData2D pd = new PlotData2D(m_data);
	pd.setPlotName("Master Plot");
	vp.setMasterPlot(pd);
	//System.out.println("x: "+i+" y: "+j);
	vp.setXIndex(m_selectedAttribs[i]);
	vp.setYIndex(m_selectedAttribs[j]);
	vp.m_ColourCombo.setSelectedIndex( m_classIndex );
      }
      catch(Exception ex) { ex.printStackTrace(); }
      jf.getContentPane().add(vp);
      jf.setSize(800,600);
      jf.setVisible(true);
    } 

    public void mouseEntered(MouseEvent e){ }
    public void mouseExited(MouseEvent e){ }
    public void mousePressed(MouseEvent e){ }
    public void mouseReleased(MouseEvent e){ }

    /** sets the new jitter value for the plots
     */
    public void setJitter(int newjitter) {
      jitter = newjitter;
    }
      
    /** sets the new size for the plots
     */
    public void setCellSize(int newCellSize) {
      cellSize = newCellSize;
      initialize();
    }

    /** Returns the X and Y attributes of the plot the mouse is currently
	on
    */
    public String getToolTipText(MouseEvent event) {
      int xpos=extpad, ypos=extpad;
	  
      for(int j=m_selectedAttribs.length-1; j>=0; j--) {
	for(int i=0; i<m_selectedAttribs.length; i++) {
	  if(event.getX()>=xpos && event.getX()<=xpos+cellSize+extpad)
	    if(event.getY()>=ypos && event.getY()<=ypos+cellSize+extpad)
	      return("X: "+m_data.attribute(m_selectedAttribs[i]).name()+
		     " Y: "+m_data.attribute(m_selectedAttribs[j]).name()+
		     " (double click to enlarge)");
	  xpos+=cellSize+extpad;
	}
	xpos=extpad;
	ypos+=cellSize+extpad;
      }
      return ("Matrix Panel");
    }

    /**  Paints a single Plot at xpos, ypos. and xattrib and yattrib on X and
	 Y axes
    */
    public void paintGraph(Graphics g, int xattrib, int yattrib, int xpos, int ypos) {
      int x, y;
      g.setColor( this.getBackground().darker().darker() );
      g.drawRect(xpos-1, ypos-1, cellSize+1, cellSize+1);
      g.setColor(Color.white);
      g.fillRect(xpos, ypos, cellSize, cellSize);
      for(int i=0; i<m_points.length; i++) {

	if( !(m_missing[i][yattrib] || m_missing[i][xattrib]) ) {      

	  if(m_type[0]==0)
	    if(m_missing[i][m_missing[0].length-1])
	      g.setColor(m_defaultColors[m_defaultColors.length-1]);
	    else
	      g.setColor( new Color(m_pointColors[i],150,(255-m_pointColors[i])) );
	  else 
	    g.setColor((Color)m_colorList.elementAt(m_pointColors[i]));

	  if(m_points[i][xattrib]+jitterVals[i][0]<0 || m_points[i][xattrib]+jitterVals[i][0]>cellRange)
	    if(cellRange-m_points[i][yattrib]+jitterVals[i][1]<0 || cellRange-m_points[i][yattrib]+jitterVals[i][1]>cellRange) {
	      //both x and y out of range don't add jitter
	      x=intpad+m_points[i][xattrib];
	      y=intpad+(cellRange - m_points[i][yattrib]);
	    }
	    else {
	      //only x out of range
	      x=intpad+m_points[i][xattrib];
	      y=intpad+(cellRange - m_points[i][yattrib])+jitterVals[i][1];
	    }
	  else if(cellRange-m_points[i][yattrib]+jitterVals[i][1]<0 || cellRange-m_points[i][yattrib]+jitterVals[i][1]>cellRange) {
	    //only y out of range
	    x=intpad+m_points[i][xattrib]+jitterVals[i][0];
	    y=intpad+(cellRange - m_points[i][yattrib]);
	  }
	  else {
	    //none out of range
	    x=intpad+m_points[i][xattrib]+jitterVals[i][0];
	    y=intpad+(cellRange - m_points[i][yattrib])+jitterVals[i][1];
	  }
	  if(datapointSize==1)
	      g.drawLine(x+xpos, y+ypos, x+xpos, y+ypos);
	  else 
	      g.drawOval(x+xpos-datapointSize/2, y+ypos-datapointSize/2, datapointSize, datapointSize);
	}
      }
      g.setColor( fontColor );
    }


    /**
       Paints the matrix of plots in the current visible region
    */
    public void paintME(Graphics g) {
      r = g.getClipBounds();

      g.setColor( this.getBackground() );
      g.fillRect(r.x, r.y, r.width, r.height);
      g.setColor( fontColor );

      int xpos = 0, ypos = 0, attribWidth=0;
	  
      xpos = extpad;
      ypos=extpad;
	
	  
      for(int j=m_selectedAttribs.length-1; j>=0; j--) {
	if( ypos+cellSize < r.y )
	  { ypos += cellSize+extpad;  continue; }
	else if( ypos > r.y+r.height )
	  break;
	else {
	    for(int i=0; i<m_selectedAttribs.length; i++) {
		if( xpos+cellSize < r.x) {
		    xpos += cellSize+extpad; continue; }
		else if(xpos > r.x+r.width)
		    break;
		else
		    paintGraph(g, i, j, xpos, ypos); //m_selectedAttribs[i], m_selectedAttribs[j], xpos, ypos);
		xpos += cellSize+extpad;
	    }
	}
	xpos = extpad;
	ypos += cellSize+extpad;
      }
    }
      
    /** paints this JPanel (PlotsPanel)
     */
    public void paintComponent(Graphics g) {
      paintME(g);
    }
  }
}

⌨️ 快捷键说明

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