jf.dispose();
    private void searchPoints(int x, int y, final boolean newFrame) {      if (m_pointLookup != null) {	int longest=0;	for (int j=0;j<m_plotInstances.numAttributes();j++) {	  if (m_plotInstances.attribute(j).name().length() > longest) {	    longest = m_plotInstances.attribute(j).name().length();	  }	}	if (m_preds != null) {	  longest = (longest < 9) ? 9 : longest;	}	StringBuffer insts = new StringBuffer(); 	for (int i=0;i<m_plotInstances.numInstances();i++) {	  if (m_pointLookup[i][0] != Double.NEGATIVE_INFINITY) {	    double px = m_pointLookup[i][0]+m_pointLookup[i][3];	    double py = m_pointLookup[i][1]+m_pointLookup[i][4];	    double size = m_pointLookup[i][2];	    if ((x >= px-size) && (x <= px+size) &&		(y >= py-size) && (y <= py+size)) {	      {		insts.append("\nInstance: "+i+"\n");		for (int j=0;j<m_plotInstances.numAttributes();j++) {		  for (int k = 0;k < 			 (longest-m_plotInstances.			  attribute(j).name().length()); k++) {		    insts.append(" ");		  }		  insts.append(m_plotInstances.attribute(j).name());  		  insts.append(" : ");		  		  if (m_plotInstances.instance(i).isMissing(j)) {		    insts.append("Missing");		  } else if (m_plotInstances.attribute(j).isNominal()) {		    insts.append(m_plotInstances.				 attribute(j).				 value((int)m_plotInstances.				       instance(i).value(j)));		  } else {		    insts.append(m_plotInstances.instance(i).value(j));		  }		  insts.append("\n");		}		if (m_preds != null && 		    (m_plotInstances.classIndex() < 0 || 		     !m_plotInstances.instance(i).		     isMissing(m_plotInstances.classIndex()))) {		  if (longest > 9) {		    for (int k = 0;k < (longest-9); k++) {		      insts.append(" ");		    }		  }		   		  if (m_plotInstances.classIndex() >=0) {		    insts.append("predicted : ");		    if (m_plotInstances.attribute(m_cIndex).isNominal()) {		      insts.append(m_plotInstances.				   attribute(m_plotInstances.classIndex()).				   value((int)m_preds[i]));		    } else {		      insts.append(m_preds[i]);		    }		  } else {		    insts.append("  cluster : ");		    insts.append((int)m_preds[i]);		  }		 		  insts.append("\n");		}	      }	    }	  }	}	if (insts.length() > 0) {	  // Pop up a new frame	  if (newFrame || m_InstanceInfo == null) {	    JTextArea jt = new JTextArea();	    jt.setFont(new Font("Monospaced", Font.PLAIN,12));	    jt.setEditable(false);	    jt.setText(insts.toString());	    final JFrame jf = new JFrame("Weka : Instance info");	    jf.addWindowListener(new WindowAdapter() {		public void windowClosing(WindowEvent e) {		  jf.dispose();		  if (!newFrame) {		    m_InstanceInfo = null;		  }		}	      });	    jf.getContentPane().setLayout(new BorderLayout());	    jf.getContentPane().add(new JScrollPane(jt), BorderLayout.CENTER);	    jf.pack();	    jf.setSize(320, 400);	    jf.setVisible(true);	    if (m_InstanceInfo == null) {	      m_InstanceInfo = jf;	      m_InstanceInfoText = jt;	    }	  }  else {	    // Overwrite info in existing frame	  	    m_InstanceInfoText.setText(insts.toString());	  }	}      }    }