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

📄 treevisualizer.java

📁 MacroWeka扩展了著名数据挖掘工具weka
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
      if (m_focusNode >= 0) {
	if (m_listener != null) {
	  //then send message to the listener
	  m_listener.userCommand(new TreeDisplayEvent
	    (TreeDisplayEvent.ADD_CHILDREN, 
	     m_nodes[m_focusNode].m_node.getRefer()));
	}
	else {
	  JOptionPane.showMessageDialog(this, "Sorry, there is no " + 
					"available Decision Tree to " +
					"perform this operation on.",
					"Sorry!", 
					JOptionPane.WARNING_MESSAGE);
	}
      }
      else {
	JOptionPane.showMessageDialog(this, "Error, there is no " +
				      "selected Node to perform this " +
				      "operation on.", "Error!",
				      JOptionPane.ERROR_MESSAGE);
      }
    }
    else if (e.getActionCommand().equals("Remove Child Nodes")) {
      if (m_focusNode >= 0) {
	if (m_listener != null) {
	  //then send message to the listener
	  m_listener.userCommand(new 
	    TreeDisplayEvent(TreeDisplayEvent.REMOVE_CHILDREN, 
			     m_nodes[m_focusNode].m_node.getRefer()));
	}
	else {
	  JOptionPane.showMessageDialog(this, "Sorry, there is no " + 
					"available Decsion Tree to " +
					"perform this operation on.",
					"Sorry!", 
					JOptionPane.WARNING_MESSAGE);
	}
      }
      else {
	JOptionPane.showMessageDialog(this, "Error, there is no " +
				      "selected Node to perform this " +
				      "operation on.", "Error!",
				      JOptionPane.ERROR_MESSAGE);
      }
    }
    else if (e.getActionCommand().equals("classify_child")) {
      if (m_focusNode >= 0) {
	if (m_listener != null) {
	  //then send message to the listener
	  m_listener.userCommand(new TreeDisplayEvent
	    (TreeDisplayEvent.CLASSIFY_CHILD, 
	     m_nodes[m_focusNode].m_node.getRefer()));
	}
	else {
	  JOptionPane.showMessageDialog(this, "Sorry, there is no " + 
					"available Decsion Tree to " +
					"perform this operation on.",
					"Sorry!", 
					JOptionPane.WARNING_MESSAGE);
	}
      }
      else {
	JOptionPane.showMessageDialog(this, "Error, there is no " +
				      "selected Node to perform this " +
				      "operation on.", "Error!",
				      JOptionPane.ERROR_MESSAGE);
      }
    }
    else if (e.getActionCommand().equals("send_instances")) {
      if (m_focusNode >= 0) {
	if (m_listener != null) {
	  //then send message to the listener
	  m_listener.userCommand(new TreeDisplayEvent
	    (TreeDisplayEvent.SEND_INSTANCES, 
	     m_nodes[m_focusNode].m_node.getRefer()));
	}
	else {
	  JOptionPane.showMessageDialog(this, "Sorry, there is no " + 
					"available Decsion Tree to " +
					"perform this operation on.",
					"Sorry!", 
					JOptionPane.WARNING_MESSAGE);
	}
      }
      else {
	JOptionPane.showMessageDialog(this, "Error, there is no " +
				      "selected Node to perform this " +
				      "operation on.", "Error!",
				      JOptionPane.ERROR_MESSAGE);
      }
    }
    else if (e.getActionCommand().equals("Accept The Tree")) {
      if (m_listener != null) {
	//then send message to the listener saying that the tree is done
	m_listener.userCommand(new TreeDisplayEvent(TreeDisplayEvent.ACCEPT,
						  null));
      }
      else {
	JOptionPane.showMessageDialog(this, "Sorry, there is no " +
				      "available Decision Tree to " +
				      "perform this operation on.",
				      "Sorry!", 
				      JOptionPane.WARNING_MESSAGE);
      }
    }
  }

  /**
   * Performs the action associated with the ItemEvent.
   *
   * @param e the item event.
   */
  public void itemStateChanged(ItemEvent e)
  {
    JRadioButtonMenuItem c = (JRadioButtonMenuItem)e.getSource();
    if (c.getActionCommand().equals("Size 24")) {
      changeFontSize(24);
    }
    else if (c.getActionCommand().equals("Size 22")) {
      changeFontSize(22);
    }
    else if (c.getActionCommand().equals("Size 20")) {
      changeFontSize(20);
    }
    else if (c.getActionCommand().equals("Size 18")) {
      changeFontSize(18);
    } 
    else if (c.getActionCommand().equals("Size 16")) {
      changeFontSize(16);
    }
    else if (c.getActionCommand().equals("Size 14")) {
      changeFontSize(14);
    }
    else if (c.getActionCommand().equals("Size 12")) {
      changeFontSize(12);
    }
    else if (c.getActionCommand().equals("Size 10")) {
      changeFontSize(10);
    }
    else if (c.getActionCommand().equals("Size 8")) {
      changeFontSize(8);
    }
    else if (c.getActionCommand().equals("Size 6")) {
      changeFontSize(6);
    }
    else if (c.getActionCommand().equals("Size 4")) {
      changeFontSize(4);
    }
    else if (c.getActionCommand().equals("Size 2")) {
      changeFontSize(2);
    }
    else if (c.getActionCommand().equals("Size 1")) {
      changeFontSize(1);
    }
    else if (c.getActionCommand().equals("Hide Descendants")) {
      //focus_node.setCVisible(!c.isSelected());
      //no longer used...
    }
  }

  /**
   * Does nothing.
   * @param e the mouse event.
   */
  public void mouseClicked(MouseEvent e) {
    //if the mouse was left clicked on 
    //the node then 
    if (m_clickAvailable) {
      //determine if the click was on a node or not
      int s = -1;
      
      for (int noa = 0; noa < m_numNodes;noa++) {
	if (m_nodes[noa].m_quad == 18) {
	  //then is on the screen
	  calcScreenCoords(noa);
	  if (e.getX() <= m_nodes[noa].m_center + m_nodes[noa].m_side 
	      && e.getX() 
	      >= m_nodes[noa].m_center - m_nodes[noa].m_side &&
	      e.getY() >= m_nodes[noa].m_top && e.getY() 
	      <= m_nodes[noa].m_top + m_nodes[noa].m_height) {
	    //then it is this node that the mouse was clicked on
	    s = noa;
	  }
	  m_nodes[noa].m_top = 32000;
	}
      }
      m_focusNode = s;
      
      if (m_focusNode != -1) {
	if (m_listener != null) {
	  //then set this to be the selected node for editing
	  actionPerformed(new ActionEvent(this, 32000, "Create Child Nodes"));
	  
	}
	else {
	  //then open a visualize to display this nodes instances if possible
	  actionPerformed(new ActionEvent(this, 32000, "Visualize The Node"));
	}
      }
    }
  }
  
  /**
   * Determines what action the user wants to perform.
   *
   * @param e the mouse event.
   */  
  public void mousePressed(MouseEvent e) {
    m_frameLimiter.setRepeats(true);
    if ((e.getModifiers() & e.BUTTON1_MASK) != 0 && !e.isAltDown() && 
	m_mouseState == 0 
	&& m_scaling == 0) {
      //then the left mouse button has been pressed
      //check for modifiers
      
      if (((e.getModifiers() & e.CTRL_MASK) != 0) && ((e.getModifiers() & e.SHIFT_MASK) == 0)) {
	//then is in zoom out mode
	m_mouseState = 2;
      }
      else if (((e.getModifiers() & e.SHIFT_MASK) != 0) && ((e.getModifiers() & e.CTRL_MASK) == 0)) {
	//then is in zoom mode
	//note if both are pressed default action is to zoom out
	m_oldMousePos.width = e.getX();
	m_oldMousePos.height = e.getY();
	m_newMousePos.width = e.getX();
	m_newMousePos.height = e.getY();
	m_mouseState = 3;
	
	Graphics g = getGraphics();
	g.setColor(Color.black);
	g.setXORMode(Color.white);
	g.drawRect(m_oldMousePos.width, m_oldMousePos.height,
		   m_newMousePos.width - m_oldMousePos.width, 
		   m_newMousePos.height - m_oldMousePos.height);
	g.dispose();
      }
      else {
	//no modifiers drag area around
	m_oldMousePos.width = e.getX();
	m_oldMousePos.height = e.getY();
	m_newMousePos.width = e.getX();
	m_newMousePos.height = e.getY();
	m_mouseState = 1;
	m_frameLimiter.start();
      }
      
    }
    // pop up save dialog explicitly (is somehow overridden...)
    else if ( (e.getButton() == MouseEvent.BUTTON1) && e.isAltDown() && e.isShiftDown() && !e.isControlDown() ) {
      saveComponent();
    }
    else if (m_mouseState == 0 && m_scaling == 0) {
      //either middle or right mouse button pushed
      //determine menu to use
      
    }
  }
  
  /**
   * Performs the final stages of what the user wants to perform.
   *
   * @param e the mouse event.
   */
  public void mouseReleased(MouseEvent e) {
    if (m_mouseState == 1) {
      //this is used by mouseClicked to determine if it is alright to do 
      //something
      m_clickAvailable = true;
	//note that a standard click with the left mouse is pretty much the 
      //only safe input left to be assigned anything.
    }
    else {
      m_clickAvailable = false;
    }
    if (m_mouseState == 2 && mouseInBounds(e)) {
      //then zoom out;
      m_mouseState = 0;
      Dimension ns = new Dimension(m_viewSize.width / 2, m_viewSize.height 
				   / 2);
      if (ns.width < 10) {
	ns.width = 10;
      }
      if (ns.height < 10) {
	ns.height = 10;
      }
      
      Dimension d = getSize();
      Dimension np = new Dimension((int)(d.width / 2 
					 - ((double)d.width / 2 
					    - m_viewPos.width) / 2),
				   (int)(d.height / 2 
					 - ((double)d.height / 2
					    - m_viewPos.height) / 2));
      
      animateScaling(np, ns, 10);
      
      //view_pos.width += view_size.width / 2;
      //view_pos.height += view_size.height / 2;
      
    }
    else if (m_mouseState == 3) {
      //then zoom in
      m_mouseState = 0;
      Graphics g = getGraphics();
      g.setColor(Color.black);
      g.setXORMode(Color.white);
      g.drawRect(m_oldMousePos.width, m_oldMousePos.height, 
		 m_newMousePos.width - m_oldMousePos.width, 
		 m_newMousePos.height - m_oldMousePos.height);
      g.dispose();
      
      
      
      int cw = m_newMousePos.width - m_oldMousePos.width;
      int ch = m_newMousePos.height - m_oldMousePos.height;
      if (cw >= 1 && ch >= 1) {
	if (mouseInBounds(e) && 
	    (getSize().width / cw) <= 6 &&
	    (getSize().height / ch) <= 6) {
	  
	  //now calculate new position and size
	  Dimension ns = new Dimension();
	  Dimension np = new Dimension();
	  double nvsw = getSize().width / (double)(cw);
	  double nvsh = getSize().height / (double)(ch);
	  np.width = (int)((m_oldMousePos.width - m_viewPos.width) * -nvsw);
	  np.height = (int)((m_oldMousePos.height - m_viewPos.height) * -nvsh);
	  ns.width = (int)(m_viewSize.width * nvsw);
	  ns.height = (int)(m_viewSize.height * nvsh);
	  
	  animateScaling(np, ns, 10);
	  
	  
	}
      }
    }
    else if (m_mouseState == 0 && m_scaling == 0) {
      //menu
      m_mouseState = 0;
      setFont(new Font("A Name", 0, 12));
      //determine if the click was on a node or not
      int s = -1;
      
      for (int noa = 0; noa < m_numNodes;noa++) {
	if (m_nodes[noa].m_quad == 18) {
	  //then is on the screen
	  calcScreenCoords(noa);
	  if (e.getX() <= m_nodes[noa].m_center + m_nodes[noa].m_side 
	      && e.getX() 
	      >= m_nodes[noa].m_center - m_nodes[noa].m_side &&
	      e.getY() >= m_nodes[noa].m_top && e.getY() 
	      <= m_nodes[noa].m_top + m_nodes[noa].m_height) {
	    //then it is this node that the mouse was clicked on
	    s = noa;
	  }
	  m_nodes[noa].m_top = 32000;
	}
      }
      if (s == -1) {
	//the mouse wasn't clicked on a node
	m_winMenu.show(this,e.getX(),e.getY());
      }
      else {
	//the mouse was clicked on a node
	m_focusNode = s;
	m_nodeMenu.show(this, e.getX(), e.getY());
	
      }
      setFont(m_currentFont);
    }
    else if (m_mouseState == 1) {
      //dragging
      m_mouseState = 0;
      m_frameLimiter.stop();
      repaint();
    }
    
  }
  
  /**
   * Checks to see if the coordinates of the mouse lie on this JPanel.
   *
   * @param e the mouse event.
   * @return true if the mouse lies on this JPanel. 
   */
  private boolean mouseInBounds(MouseEvent e) {
    //this returns true if the mouse is currently over the canvas otherwise 
    //false
    
    if (e.getX() < 0 || e.getY() < 0 || e.getX() > getSize().width 
	|| e.getY() > getSize().height) {
      return false;
    }
    return true;
  }
  
  /**
   * Performs intermediate updates to what the user wishes to do.
   *
   * @param e the mouse event.
   */
  public void mouseDragged(MouseEvent e) {
    //use mouse state to determine what to do to the view of the tree
    
    if (m_mouseState == 1) {
      //then dragging view
      m_oldMousePos.width = m_newMousePos.width;
      m_oldMousePos.height = m_newMousePos.height;
      m_newMousePos.width = e.getX();
      m_newMousePos.height = e.getY();
      m_viewPos.width += m_newMousePos.width - m_oldMousePos.width;
      m_viewPos.height += m_newMousePos.height - m_oldMousePos.height;

⌨️ 快捷键说明

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