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

📄 classpanel.java

📁 wekaUT是 university texas austin 开发的基于weka的半指导学习(semi supervised learning)的分类器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    setOn(true);    this.repaint();  }      /**   * Renders the legend for a nominal colouring attribute   * @param gx the graphics context   */  protected void paintNominal(Graphics gx) {    setFonts(gx);    int numClasses;    numClasses = m_Instances.attribute(m_cIndex).numValues();    int maxLabelLen = 0;    int idx=0;    int legendHeight;    int w = this.getWidth();    int hf = m_labelMetrics.getAscent();    for (int i=0;i<numClasses;i++) {      if (m_Instances.attribute(m_cIndex).value(i).length() > 	  maxLabelLen) {	maxLabelLen = m_Instances.	  attribute(m_cIndex).value(i).length();	idx = i;      }    }          maxLabelLen = m_labelMetrics.stringWidth(m_Instances.					     attribute(m_cIndex).value(idx));        if (((w-(2*m_HorizontalPad))/(maxLabelLen+5)) >= numClasses) {      legendHeight = 1;    } else {      legendHeight = 2;    }	    int x = m_HorizontalPad;    int y = 1 + hf;    // do the first row    int ci, mp;    Color pc;    int numToDo = ((legendHeight==1) ? numClasses : (numClasses/2));    for (int i=0;i<numToDo;i++) {           gx.setColor((Color)m_colorList.elementAt(i));      // can we fit the full label or will each need to be trimmed?      if ((numToDo * maxLabelLen) > (w-(m_HorizontalPad*2))) {	String val;	val = m_Instances.attribute(m_cIndex).value(i);	int sw = m_labelMetrics.stringWidth(val);	int rm=0;	// truncate string if necessary	if (sw > ((w-(m_HorizontalPad*2)) / (numToDo))) {	  int incr = (sw / val.length());	  rm = (sw -  ((w-(m_HorizontalPad*2)) / numToDo)) / incr;	  if (rm <= 0) {	    rm = 0;	  }	  val = val.substring(0,val.length()-rm);	  sw = m_labelMetrics.stringWidth(val);	}	NomLabel jj = new NomLabel(val, i);	jj.setFont(gx.getFont());	jj.setSize(m_labelMetrics.stringWidth(jj.getText()),		   m_labelMetrics.getAscent() + 4);	this.add(jj);	jj.setLocation(x, y);	jj.setForeground((Color)m_colorList.			 elementAt(i % m_colorList.size()));	x += sw + 2;      } else {		NomLabel jj;	jj = new NomLabel(m_Instances.attribute(m_cIndex).value(i), i);	jj.setFont(gx.getFont());	jj.setSize(m_labelMetrics.stringWidth(jj.getText()),		   m_labelMetrics.getAscent() + 4);	this.add(jj);	jj.setLocation(x, y);	jj.setForeground((Color)m_colorList.			 elementAt(i % m_colorList.size()));  	x += ((w-(m_HorizontalPad*2)) / numToDo);      }	      }    x = m_HorizontalPad;    y = 1+ hf + 5 +hf;    for (int i=numToDo;i<numClasses;i++) {            gx.setColor((Color)m_colorList.elementAt(i));      if (((numClasses-numToDo+1) * maxLabelLen) > 	  (w - (m_HorizontalPad*2))) {	String val;	val = m_Instances.attribute(m_cIndex).value(i);	int sw = m_labelMetrics.stringWidth(val);	int rm=0;	// truncate string if necessary	if (sw > ((w-(m_HorizontalPad*2)) / (numClasses-numToDo+1))) {	  int incr = (sw / val.length());	  rm = (sw -  ((w-(m_HorizontalPad*2)) / (numClasses-numToDo))) 	    / incr;	  if (rm <= 0) {	    rm = 0;	  }	  val = val.substring(0,val.length()-rm);	  sw = m_labelMetrics.stringWidth(val);	}	//this is the clipped string	NomLabel jj = new NomLabel(val, i);	jj.setFont(gx.getFont());	jj.setSize(m_labelMetrics.stringWidth(jj.getText()),		   m_labelMetrics.getAscent() + 4);	this.add(jj);	jj.setLocation(x, y);	jj.setForeground((Color)m_colorList.			 elementAt(i % m_colorList.size()));		x += sw +2;      } else {	//this is the full string	NomLabel jj;	jj = new NomLabel(m_Instances.attribute(m_cIndex).value(i), i);	jj.setFont(gx.getFont());	jj.setSize(m_labelMetrics.stringWidth(jj.getText()),		   m_labelMetrics.getAscent() + 4);	this.add(jj);	jj.setLocation(x, y);	jj.setForeground((Color)m_colorList.			 elementAt(i % m_colorList.size()));	x += ((w - (m_HorizontalPad*2)) / (numClasses-numToDo));      }	      }  }  /**   * Renders the legend for a numeric colouring attribute   * @param gx the graphics context   */  protected void paintNumeric(Graphics gx) {    setFonts(gx);    if (m_HorizontalPad == 0) {      setCindex(m_cIndex);    }    int w = this.getWidth();    double rs = 15;    double incr = 240.0 / (double)(w-(m_HorizontalPad*2));    int hf = m_labelMetrics.getAscent();          for (int i=m_HorizontalPad;i<	   (w-m_HorizontalPad);i++) {      Color c = new Color((int)rs,150,(int)(255-rs));      gx.setColor(c);      gx.drawLine(i,0,		  i,0+m_spectrumHeight);      rs += incr;    }    int whole = (int)Math.abs(m_maxC);    double decimal = Math.abs(m_maxC) - whole;    int nondecimal;    nondecimal = (whole > 0)       ? (int)(Math.log(whole) / Math.log(10))      : 1;        m_precisionC = (decimal > 0)       ? (int)Math.abs(((Math.log(Math.abs(m_maxC)) / 			Math.log(10))))+2      : 1;    if (m_precisionC > VisualizeUtils.MAX_PRECISION) {      m_precisionC = 1;    }    String maxStringC = Utils.doubleToString(m_maxC,					     nondecimal+1+m_precisionC					     ,m_precisionC);	    int mswc = m_labelMetrics.stringWidth(maxStringC);    int tmsc = mswc;    if (w > (2 * tmsc)) {      gx.setColor(Color.black);      gx.drawLine(m_HorizontalPad,		  (m_spectrumHeight+5),		  w-m_HorizontalPad,		  (m_spectrumHeight+5));      gx.drawLine(w-m_HorizontalPad,		  (m_spectrumHeight+5),		  w-m_HorizontalPad,		  (m_spectrumHeight+5+m_tickSize));      gx.drawString(maxStringC, 		    (w-m_HorizontalPad)-(mswc/2),		    (m_spectrumHeight+5+m_tickSize+hf));      gx.drawLine(m_HorizontalPad,		  (m_spectrumHeight+5),		  m_HorizontalPad,		  (m_spectrumHeight+5+m_tickSize));      whole = (int)Math.abs(m_minC);      decimal = Math.abs(m_minC) - whole;      nondecimal = (whole > 0) 	? (int)(Math.log(whole) / Math.log(10))	: 1;            m_precisionC = (decimal > 0) 	? (int)Math.abs(((Math.log(Math.abs(m_minC)) / 			  Math.log(10))))+2	: 1;      if (m_precisionC > VisualizeUtils.MAX_PRECISION) {	m_precisionC = 1;      }            maxStringC = Utils.doubleToString(m_minC,					nondecimal+1+m_precisionC					,m_precisionC);      mswc = m_labelMetrics.stringWidth(maxStringC);      gx.drawString(maxStringC, 		    m_HorizontalPad-(mswc/2),		    (m_spectrumHeight+5+m_tickSize+hf));      // draw the middle value if there is space      if (w > (3 * tmsc)) {	double mid = m_minC+((m_maxC-m_minC)/2.0);	gx.drawLine(m_HorizontalPad+((w-(2*m_HorizontalPad))/2),		    (m_spectrumHeight+5),		    m_HorizontalPad+((w-(2*m_HorizontalPad))/2),		    (m_spectrumHeight+5+m_tickSize));	whole = (int)Math.abs(mid);	decimal = Math.abs(mid) - whole;	nondecimal = (whole > 0) 	  ? (int)(Math.log(whole) / Math.log(10))	  : 1;		m_precisionC = (decimal > 0) 	  ? (int)Math.abs(((Math.log(Math.abs(mid)) / 			    Math.log(10))))+2	  : 1;	if (m_precisionC > VisualizeUtils.MAX_PRECISION) {	  m_precisionC = 1;	}		maxStringC = Utils.doubleToString(mid,					  nondecimal+1+m_precisionC					  ,m_precisionC);	mswc = m_labelMetrics.stringWidth(maxStringC);	gx.drawString(maxStringC,		      m_HorizontalPad+((w-(2*m_HorizontalPad))/2)-(mswc/2),		      (m_spectrumHeight+5+m_tickSize+hf));      }    }  }  /**   * Renders this component   * @param gx the graphics context   */  public void paintComponent(Graphics gx) {    super.paintComponent(gx);    if (m_isEnabled) {      if (m_isNumeric) {	m_oldWidth = -9000;   //done so that if change back to nom, it will	//work	this.removeAll();	paintNumeric(gx);      } else {	if (m_Instances != null && 	    m_Instances.numInstances() > 0 && 	    m_Instances.numAttributes() > 0) {	  if (m_oldWidth != this.getWidth()) {	    this.removeAll();	    m_oldWidth = this.getWidth();	    paintNominal(gx);	  }	}      }    }  }  /**   * Main method for testing this class.   * @param args first argument must specify an arff file. Second can   * specify an optional index to colour labels on   */  public static void main(String [] args) {    try {      if (args.length < 1) {	System.err.println("Usage : weka.gui.visualize.ClassPanel <dataset> "			   +"[class col]");	System.exit(1);      }      final javax.swing.JFrame jf = 	new javax.swing.JFrame("Weka Knowledge Explorer: Class");      jf.setSize(500,100);      jf.getContentPane().setLayout(new BorderLayout());      final ClassPanel p2 = new ClassPanel();      jf.getContentPane().add(p2, BorderLayout.CENTER);      jf.addWindowListener(new java.awt.event.WindowAdapter() {	  public void windowClosing(java.awt.event.WindowEvent e) {	    jf.dispose();	    System.exit(0);	  }	});	      if (args.length >= 1) {	System.err.println("Loading instances from " + args[0]);	java.io.Reader r = new java.io.BufferedReader(			   new java.io.FileReader(args[0]));	Instances i = new Instances(r);	i.setClassIndex(i.numAttributes()-1);	p2.setInstances(i);      }      if (args.length > 1) {	p2.setCindex((Integer.parseInt(args[1]))-1);      } else {	p2.setCindex(0);      }      jf.setVisible(true);    } catch (Exception ex) {      ex.printStackTrace();      System.err.println(ex.getMessage());    }  }}

⌨️ 快捷键说明

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