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

📄 graphvisualizer.java

📁 一个数据挖掘软件ALPHAMINERR的整个过程的JAVA版源代码
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
	else
	    System.err.println(ICONPATH+"extra.gif not found for weka.gui.graphvisualizer.Graph");
	jBtExtraControls.setToolTipText("Show/Hide extra controls");
	

	final JCheckBox jCbCustomNodeSize = new JCheckBox("Custom Node Size");
	final JLabel jLbNodeWidth = new JLabel("Width");
	final JLabel jLbNodeHeight = new JLabel("Height");
	
	jTfNodeWidth.setHorizontalAlignment(JTextField.CENTER);
	jTfNodeWidth.setText(""+nodeWidth);
	jTfNodeHeight.setHorizontalAlignment(JTextField.CENTER);
	jTfNodeHeight.setText(""+nodeHeight);
	jLbNodeWidth.setEnabled(false);
	jTfNodeWidth.setEnabled(false);
	jLbNodeHeight.setEnabled(false);
	jTfNodeHeight.setEnabled(false);

	jCbCustomNodeSize.addActionListener( new ActionListener() {
		                        public void actionPerformed(ActionEvent ae) {
					    if( ((JCheckBox)ae.getSource()).isSelected() ) {
						jLbNodeWidth.setEnabled(true);
						jTfNodeWidth.setEnabled(true);
						jLbNodeHeight.setEnabled(true);
						jTfNodeHeight.setEnabled(true);						
					    }
					    else {
						jLbNodeWidth.setEnabled(false);
						jTfNodeWidth.setEnabled(false);
						jLbNodeHeight.setEnabled(false);
						jTfNodeHeight.setEnabled(false);
						setAppropriateNodeSize();
					    }
					}
	                                  });


	jBtLayout  = new JButton("Layout Graph");
	jBtLayout.addActionListener( new ActionListener() {
		                    public void actionPerformed(ActionEvent ae) {
					int tmpW, tmpH;

					if(jCbCustomNodeSize.isSelected()) {
					    try{ tmpW = Integer.parseInt(jTfNodeWidth.getText()); }
					    catch(NumberFormatException ne) {
						JOptionPane.showMessageDialog(GraphVisualizer.this.getParent(),
									      "Invalid integer entered for node width.",
									      "Error",
									      JOptionPane.ERROR_MESSAGE);
						tmpW = nodeWidth;
						jTfNodeWidth.setText(""+nodeWidth);
						
					    }
					    try{ tmpH = Integer.parseInt(jTfNodeHeight.getText()); }
					    catch(NumberFormatException ne) {
						JOptionPane.showMessageDialog(GraphVisualizer.this.getParent(),
									      "Invalid integer entered for node height.",
									      "Error",
									      JOptionPane.ERROR_MESSAGE);
						tmpH = nodeHeight;
						jTfNodeWidth.setText(""+nodeHeight);
					    }
					    
					    if(tmpW!=nodeWidth || tmpH!=nodeHeight) {
						nodeWidth = tmpW; paddedNodeWidth = nodeWidth+8; nodeHeight = tmpH;
					    }
					}
					JButton bt = (JButton)ae.getSource();
					bt.setEnabled(false);
					m_le.setNodeSize(paddedNodeWidth, nodeHeight);
					m_le.layoutGraph();					
				    }
	                          });


	GridBagConstraints gbc = new GridBagConstraints();

	final JPanel p = new JPanel(new GridBagLayout());
	gbc.gridwidth = gbc.REMAINDER;
	gbc.anchor = gbc.NORTHWEST;
	gbc.fill = gbc.NONE;
	p.add( m_le.getControlPanel(), gbc);
	gbc.gridwidth = 1;
	gbc.insets = new Insets(8,0,0,0);
	gbc.anchor = gbc.NORTHWEST;
	gbc.gridwidth = gbc.REMAINDER;

	p.add( jCbCustomNodeSize, gbc );
	gbc.insets = new Insets(0,0,0,0);
	gbc.gridwidth = gbc.REMAINDER;
	Container c = new Container();
	c.setLayout( new GridBagLayout() );
	gbc.gridwidth = gbc.RELATIVE;
	c.add(jLbNodeWidth, gbc);
	gbc.gridwidth = gbc.REMAINDER;
	c.add(jTfNodeWidth, gbc);
	gbc.gridwidth = gbc.RELATIVE;
	c.add(jLbNodeHeight, gbc);
	gbc.gridwidth = gbc.REMAINDER;
	c.add(jTfNodeHeight, gbc);
	gbc.fill = gbc.HORIZONTAL;
	p.add( c, gbc );
	
	gbc.anchor = gbc.NORTHWEST;
	gbc.insets = new Insets(8,0,0,0);
	gbc.fill = gbc.HORIZONTAL;
	p.add( jBtLayout, gbc );
	gbc.fill = gbc.NONE;
	p.setBorder( BorderFactory.createCompoundBorder( BorderFactory.createTitledBorder("ExtraControls"),
							 BorderFactory.createEmptyBorder(4,4,4,4) ) );
	p.setPreferredSize( new Dimension(0, 0) );

	final JToolBar jTbTools = new JToolBar();
	jTbTools.setFloatable(false);
	jTbTools.setLayout( new GridBagLayout() );
	gbc.anchor = gbc.NORTHWEST;
	gbc.gridwidth = gbc.REMAINDER;
	gbc.insets = new Insets(0,0,0,0);
	jTbTools.add(p,gbc);
	gbc.gridwidth = 1;
	jTbTools.add(m_jBtSave, gbc);
	jTbTools.addSeparator(new Dimension(2,2));
        jTbTools.add(jBtZoomIn, gbc);

	gbc.fill = gbc.VERTICAL;
	gbc.weighty = 1;
	JPanel p2 = new JPanel(new BorderLayout());
	p2.setPreferredSize( jTfZoom.getPreferredSize() );
	p2.setMinimumSize( jTfZoom.getPreferredSize() );
	p2.add(jTfZoom, BorderLayout.CENTER);
	jTbTools.add(p2, gbc);
	gbc.weighty =0;
	gbc.fill = gbc.NONE;

	jTbTools.add(jBtZoomOut, gbc);
	jTbTools.addSeparator(new Dimension(2,2));
	jTbTools.add(jBtExtraControls, gbc);
	jTbTools.addSeparator(new Dimension(4,2));
	gbc.weightx = 1;
	gbc.fill = gbc.BOTH;
	jTbTools.add(m_le.getProgressBar(), gbc);

	jBtExtraControls.addActionListener( new ActionListener() {
		           public void actionPerformed(ActionEvent ae) {
			       Dimension d = p.getPreferredSize();     
			       if(d.width==0 || d.height==0) {	
				   LayoutManager lm = p.getLayout();
				   Dimension d2 = lm.preferredLayoutSize(p);
				   p.setPreferredSize(d2); jTbTools.revalidate();
				   /* // this piece of code adds in an animation 
				      // for popping out the extra controls panel
				   Thread th = new Thread() {
					   int h = 0, w = 0;
					   LayoutManager lm = p.getLayout();
					   Dimension d2 = lm.preferredLayoutSize(p);
					   
					   int tow = (int)d2.getWidth(), toh = (int)d2.getHeight();
					   //toh = (int)d2.getHeight(); 
					   //tow = (int)d2.getWidth();
					   
					   public void run() {
					       while(h<toh || w<tow) {
						   if((h+10)<toh)
						       h += 10;
						   else if(h<toh)
						       h = toh;
						   if((w+10)<tow)
						       w += 10;
						   else if(w<tow)
						       w = tow;
						   p.setPreferredSize(new Dimension(w, h)); 
						   //p.invalidate(); 
						   jTbTools.revalidate();
						   //paint(Temp4.this.getGraphics());
						   try {this.sleep(30);} catch(InterruptedException ie) {ie.printStackTrace(); break;}
					       }
					       p.setPreferredSize(new Dimension(tow,toh)); jTbTools.revalidate();		      
					   }
				       };
				   th.start();
				   */
			       }
			       else {
				   p.setPreferredSize( new Dimension(0,0) );
				   jTbTools.revalidate();
				   /*
				   Thread th = new Thread() {
					   int h = p.getHeight(), w = p.getWidth();
					   LayoutManager lm = p.getLayout();
					   int tow = 0, toh = 0;
					   
					   public void run() {
					       while(h>toh || w>tow) {
						   if((h-10)>toh)
						       h -= 10;
						   else if(h>toh)
						       h = toh;
						   if((w-10)>tow)
						       w -= 10;
						   else if(w>tow)
						       w = tow;
						   
						   p.setPreferredSize(new Dimension(w, h)); 
						   //p.invalidate(); 
						   jTbTools.revalidate();
						   //paint(Temp4.this.getGraphics());
						   try {this.sleep(30);} catch(InterruptedException ie) {ie.printStackTrace(); break;}
					       }
					       p.setPreferredSize(new Dimension(tow,toh)); jTbTools.revalidate();		      
					   }
				       };
				   th.start();				   
				   */
			       }    
			   }
	                });
	this.setLayout( new BorderLayout() );
	this.add(jTbTools, BorderLayout.NORTH);
	this.add(m_js, BorderLayout.CENTER);
    }


    /**
     * This method sets the node size that is appropriate
     * considering the maximum label size that is present.
     * It is used internally when custom node size checkbox 
     * is unchecked.
     */
    protected void setAppropriateNodeSize() {
	int strWidth;
	if(maxStringWidth==0)
	    for(int i=0; i<m_nodes.size(); i++) {
		strWidth = fm.stringWidth(((GraphNode)m_nodes.elementAt(i)).lbl);
		if(strWidth>maxStringWidth)
		    maxStringWidth=strWidth;
	    }
	nodeWidth = maxStringWidth+4; 
	paddedNodeWidth = nodeWidth+8; 
	jTfNodeWidth.setText(""+nodeWidth);

	nodeHeight = 2*fm.getHeight();
	jTfNodeHeight.setText(""+nodeHeight);
    }
    
    /**
     * Sets the preferred size for m_gp GraphPanel to the 
     * minimum size that is neccessary to display the graph.
     */
    protected void setAppropriateSize() {
	int maxX=0, maxY=0;

	for(int i=0; i<m_nodes.size(); i++) {
	    GraphNode n = (GraphNode)m_nodes.elementAt(i);
	    if(maxX<n.x)
		maxX=n.x;
	    if(maxY<n.y)
		maxY=n.y;
	}
	//System.out.println("Scale: "+scale+" paddedWidth: "+paddedNodeWidth+" nodeHeight: "+nodeHeight+
	//		   "\nmaxX: "+maxX+" maxY: "+maxY+" final: "+(int)((maxX+paddedNodeWidth+2)*scale)+","+
	//		   (int)((maxY+nodeHeight+2)*scale) );
	m_gp.setPreferredSize(new Dimension((int)((maxX+paddedNodeWidth+2)*scale), 
					    (int)((maxY+nodeHeight+2)*scale)));
	//System.out.println("Size set to "+this.getPreferredSize());
    }


    /**
     * This method is an implementation for LayoutCompleteEventListener
     * class. It sets the size appropriate for m_gp GraphPanel and
     * and revalidates it's container JScrollPane once a 
     * LayoutCompleteEvent is received from the LayoutEngine.
     */
    public void layoutCompleted(LayoutCompleteEvent le) {
	setAppropriateSize();
	//m_gp.clearBuffer();
	m_gp.invalidate();
	m_js.revalidate();
	m_gp.repaint();
	jBtLayout.setEnabled(true);
    }


    /**
     * This method lays out the graph by calling the 
     * LayoutEngine's layoutGraph() method. This method
     * should be called to display the graph nicely, unless
     * the input XMLBIF03 already contains some layout 
     * information (ie the x,y positions of nodes.
     */
    public void layoutGraph() {
	if(m_le!=null)
	    m_le.layoutGraph();
	
    }

   /*********************************************************
    *
    *  BIF reader<br>
    *  Reads a graph description in XMLBIF03 from a string 
    *
    *********************************************************
    */
    public void readBIF(String instring) throws BIFFormatException {
	BIFParser bp = new BIFParser(instring, m_nodes, m_edges);
	try {
	graphID = bp.parse();
	} catch(BIFFormatException bf) { System.out.println("BIF format error"); bf.printStackTrace(); }
	catch(Exception ex) { ex.printStackTrace(); return; }

	setAppropriateNodeSize();
	if(m_le!=null) { 
	    m_le.setNodeSize(paddedNodeWidth, nodeHeight);
	}
    } //end readBIF1
    
  /**
    *
    *  BIF reader<br>
    *  Reads a graph description in XMLBIF03 from an InputStrem 
    *
    *
    */
      public void readBIF(InputStream instream) throws BIFFormatException {
	BIFParser bp = new BIFParser(instream, m_nodes, m_edges);
	try {
	graphID = bp.parse();
	} catch(BIFFormatException bf) { System.out.println("BIF format error"); bf.printStackTrace(); }
	  catch(Exception ex) { ex.printStackTrace(); return; }
	
	setAppropriateNodeSize();
	if(m_le!=null) { 
	    m_le.setNodeSize(paddedNodeWidth, nodeHeight);
	}
	setAppropriateSize();
    } //end readBIF2


   /*********************************************************
    *
    *  Dot reader<br>

⌨️ 快捷键说明

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