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

📄 treevisualizer.java

📁 一个数据挖掘软件ALPHAMINERR的整个过程的JAVA版源代码
💻 JAVA
📖 第 1 页 / 共 5 页
字号:


      search_win.getContentPane().setLayout(null);
      search_win.setSize(300, 200);
 
      search_win.getContentPane().add(search_string);
      search_win.getContentPane().add(case_sen);

      search_string.setLocation(50, 70);
      case_sen.setLocation(50, 120);
      case_sen.setSize(100, 24); 
      search_string.setSize(100, 24);
      //search_string.setVisible(true);
      //case_sen.setVisible(true);

      //search_win.setVisible(true);
    */

    m_nodeMenu = new JPopupMenu();
    /* A visualize choice for the node, may not be available. */
    m_visualise = new JMenuItem("Visualize The Node");
    m_visualise.setActionCommand("Visualize The Node");
    m_visualise.addActionListener(this);
    m_nodeMenu.add(m_visualise);
   
    if (m_listener != null) {
      m_remChildren = new JMenuItem("Remove Child Nodes");
      m_remChildren.setActionCommand("Remove Child Nodes");
      m_remChildren.addActionListener(this);
      m_nodeMenu.add(m_remChildren);
      
      
      m_classifyChild = new JMenuItem("Use Classifier...");
      m_classifyChild.setActionCommand("classify_child");
      m_classifyChild.addActionListener(this);
      m_nodeMenu.add(m_classifyChild);
      
      /*m_sendInstances = new JMenuItem("Add Instances To Viewer");
      m_sendInstances.setActionCommand("send_instances");
      m_sendInstances.addActionListener(this);
      m_nodeMenu.add(m_sendInstances); */
      
    }
    
    m_focusNode = -1;
    m_highlightNode = -1;
    
    addMouseMotionListener(this);
    addMouseListener(this);
    //repaint();
    //frame_limiter.setInitialDelay();
    m_frameLimiter.setRepeats(false);
    m_frameLimiter.start();
  }
  
  /**
   * Constructs Displayer with the specified Node as the top 
   * of the tree, and uses the NodePlacer to place the Nodes.
   * @param tdl listener.
   * @param n the top Node of the tree to be displayed.
   * @param p the algorithm to be used to position the nodes.
   */  
  public TreeVisualizer(TreeDisplayListener tdl, Node n, NodePlace p) {
    //if the size needs to be automatically alocated I will do it here
    setBorder(BorderFactory.createTitledBorder("Tree View")); 
    m_listener = tdl;
    m_topNode = n;
    m_placer = p;
    m_placer.place(m_topNode);
    m_viewPos = new Dimension(0, 0);    //will be adjusted 
    m_viewSize = new Dimension(800, 600);   //I allocate this now so that
    //the tree will be visible
    //when the panel is enlarged

    m_nViewPos = new Dimension(0, 0);            
    m_nViewSize = new Dimension(800, 600);          
                                      
    m_scaling = 0;
    
    m_numNodes = Node.getCount(m_topNode,0);   //note the second argument 
    //must be a zero, this is a 
    //recursive function

    m_numLevels = Node.getHeight(m_topNode,0);
  
    m_nodes = new NodeInfo[m_numNodes];
    m_edges = new EdgeInfo[m_numNodes-1];

    arrayFill(m_topNode, m_nodes, m_edges);
    
    changeFontSize(12);

    m_mouseState = 0;
    m_oldMousePos = new Dimension(0, 0);
    m_newMousePos = new Dimension(0, 0);
    m_frameLimiter = new Timer(120, this);

    m_winMenu = new JPopupMenu();
    m_topN = new JMenuItem("Center on Top Node");           //note to change 
    //language change this line
    m_topN.setActionCommand("Center on Top Node");          //but not this 
    //one, same for all menu items
    m_fitToScreen = new JMenuItem("Fit to Screen");
    m_fitToScreen.setActionCommand("Fit to Screen");
    //unhide = new JMenuItem("Unhide all Nodes");
    m_selectFont = new JMenu("Select Font");
    m_selectFont.setActionCommand("Select Font");
    m_autoScale = new JMenuItem("Auto Scale");
    m_autoScale.setActionCommand("Auto Scale");
    m_selectFontGroup = new ButtonGroup();
    
    m_accept = new JMenuItem("Accept The Tree");
    m_accept.setActionCommand("Accept The Tree");
    
    m_winMenu.add(m_topN);
    m_winMenu.addSeparator();
    m_winMenu.add(m_fitToScreen);
    m_winMenu.add(m_autoScale);
    m_winMenu.addSeparator();
    //m_winMenu.add(unhide);
    m_winMenu.addSeparator();
    m_winMenu.add(m_selectFont);
    m_winMenu.addSeparator();

    if (m_listener != null) {
      m_winMenu.add(m_accept);
    }
    
    m_topN.addActionListener(this);
    m_fitToScreen.addActionListener(this);
    //unhide.addActionListener(this);
    m_autoScale.addActionListener(this);
    m_accept.addActionListener(this);
        
    m_size24 = new JRadioButtonMenuItem("Size 24",false);//,select_font_group);
    m_size22 = new JRadioButtonMenuItem("Size 22",false);//,select_font_group);
    m_size20 = new JRadioButtonMenuItem("Size 20",false);//,select_font_group);
    m_size18 = new JRadioButtonMenuItem("Size 18",false);//,select_font_group);
    m_size16 = new JRadioButtonMenuItem("Size 16",false);//,select_font_group);
    m_size14 = new JRadioButtonMenuItem("Size 14",false);//,select_font_group);
    m_size12 = new JRadioButtonMenuItem("Size 12",true);//,select_font_group);
    m_size10 = new JRadioButtonMenuItem("Size 10",false);//,select_font_group);
    m_size8 = new JRadioButtonMenuItem("Size 8",false);//,select_font_group);
    m_size6 = new JRadioButtonMenuItem("Size 6",false);//,select_font_group);
    m_size4 = new JRadioButtonMenuItem("Size 4",false);//,select_font_group);
    m_size2 = new JRadioButtonMenuItem("Size 2",false);//,select_font_group);
    m_size1 = new JRadioButtonMenuItem("Size 1",false);//,select_font_group);

    m_size24.setActionCommand("Size 24");//,select_font_group);
    m_size22.setActionCommand("Size 22");//,select_font_group);
    m_size20.setActionCommand("Size 20");//,select_font_group);
    m_size18.setActionCommand("Size 18");//,select_font_group);
    m_size16.setActionCommand("Size 16");//,select_font_group);
    m_size14.setActionCommand("Size 14");//,select_font_group);
    m_size12.setActionCommand("Size 12");//,select_font_group);
    m_size10.setActionCommand("Size 10");//,select_font_group);
    m_size8.setActionCommand("Size 8");//,select_font_group);
    m_size6.setActionCommand("Size 6");//,select_font_group);
    m_size4.setActionCommand("Size 4");//,select_font_group);
    m_size2.setActionCommand("Size 2");//,select_font_group);
    m_size1.setActionCommand("Size 1");//,select_font_group);



    
    
    m_selectFontGroup.add(m_size24);
    m_selectFontGroup.add(m_size22);
    m_selectFontGroup.add(m_size20);
    m_selectFontGroup.add(m_size18);
    m_selectFontGroup.add(m_size16);
    m_selectFontGroup.add(m_size14);
    m_selectFontGroup.add(m_size12);
    m_selectFontGroup.add(m_size10);
    m_selectFontGroup.add(m_size8);
    m_selectFontGroup.add(m_size6);
    m_selectFontGroup.add(m_size4);
    m_selectFontGroup.add(m_size2);
    m_selectFontGroup.add(m_size1);



    
    m_selectFont.add(m_size24);
    m_selectFont.add(m_size22);
    m_selectFont.add(m_size20);
    m_selectFont.add(m_size18);
    m_selectFont.add(m_size16);
    m_selectFont.add(m_size14);
    m_selectFont.add(m_size12);
    m_selectFont.add(m_size10);
    m_selectFont.add(m_size8);
    m_selectFont.add(m_size6);
    m_selectFont.add(m_size4);
    m_selectFont.add(m_size2);
    m_selectFont.add(m_size1);


    m_size24.addItemListener(this);
    m_size22.addItemListener(this);
    m_size20.addItemListener(this);
    m_size18.addItemListener(this);
    m_size16.addItemListener(this);
    m_size14.addItemListener(this);
    m_size12.addItemListener(this);
    m_size10.addItemListener(this);
    m_size8.addItemListener(this);
    m_size6.addItemListener(this);
    m_size4.addItemListener(this);
    m_size2.addItemListener(this);
    m_size1.addItemListener(this);




    /*
      search_string = new JTextField(22);
      search_win = new JDialog();
      case_sen = new JRadioButton("Case Sensitive");



      search_win.getContentPane().setLayout(null);
      search_win.setSize(300, 200);
 
      search_win.getContentPane().add(search_string);
      search_win.getContentPane().add(case_sen);

      search_string.setLocation(50, 70);
      case_sen.setLocation(50, 120);
      case_sen.setSize(100, 24); 
      search_string.setSize(100, 24);
      //search_string.setVisible(true);
      //case_sen.setVisible(true);

      search_win.setVisible(true);
    */


    m_nodeMenu = new JPopupMenu();
    /* A visualize choice for the node, may not be available. */
    m_visualise = new JMenuItem("Visualize The Node");
    m_visualise.setActionCommand("Visualize The Node");
    m_visualise.addActionListener(this);
    m_nodeMenu.add(m_visualise);

    if (m_listener != null) {
      m_remChildren = new JMenuItem("Remove Child Nodes");
      m_remChildren.setActionCommand("Remove Child Nodes");
      m_remChildren.addActionListener(this);
      m_nodeMenu.add(m_remChildren);
      
      m_classifyChild = new JMenuItem("Use Classifier...");
      m_classifyChild.setActionCommand("classify_child");
      m_classifyChild.addActionListener(this);
      m_nodeMenu.add(m_classifyChild);
      
      m_sendInstances = new JMenuItem("Add Instances To Viewer");
      m_sendInstances.setActionCommand("send_instances");
      m_sendInstances.addActionListener(this);
      m_nodeMenu.add(m_sendInstances);
      
      
    }
  
    m_focusNode = -1;
    m_highlightNode = -1;
    

    addMouseMotionListener(this);
    addMouseListener(this);

  
    //repaint();

    //frame_limiter.setInitialDelay();
    m_frameLimiter.setRepeats(false);
    m_frameLimiter.start();
  }

  /**
   * Fits the tree to the current screen size. Call this after
   * window has been created to get the entrire tree to be in view
   * upon launch.
   */
  public void fitToScreen() {

    getScreenFit(m_viewPos, m_viewSize);
    repaint();
  }

  /**
   * Calculates the dimensions needed to fit the entire tree into view.
   */
  private void getScreenFit(Dimension np, Dimension ns) {

    int leftmost = 1000000, rightmost = -1000000;
    int leftCenter = 1000000, rightCenter = -1000000, rightNode = 0;
    int highest = -1000000, highTop = -1000000;
    for (int noa = 0; noa < m_numNodes; noa++) {
      calcScreenCoords(noa);
      if (m_nodes[noa].m_center - m_nodes[noa].m_side < leftmost) {
	leftmost = m_nodes[noa].m_center - m_nodes[noa].m_side;
      }
      if (m_nodes[noa].m_center < leftCenter) {
	leftCenter = m_nodes[noa].m_center;
      }
      
      if (m_nodes[noa].m_center + m_nodes[noa].m_side > rightmost) {
	rightmost = m_nodes[noa].m_center + m_nodes[noa].m_side;	  
      }
      if (m_nodes[noa].m_center > rightCenter) {
	rightCenter = m_nodes[noa].m_center;
	rightNode = noa;
      }
	if (m_nodes[noa].m_top + m_nodes[noa].m_height > highest) {
	  highest = m_nodes[noa].m_top + m_nodes[noa].m_height;
	}
	if (m_nodes[noa].m_top > highTop) {
	  highTop = m_nodes[noa].m_top;
	}
    }
    
    ns.width = getWidth();
    ns.width -= leftCenter - leftmost + rightmost - rightCenter + 30;
    ns.height = getHeight() - highest + highTop - 40;
    
    if (m_nodes[rightNode].m_node.getCenter() != 0 
	&& leftCenter != rightCenter) {
	ns.width /= m_nodes[rightNode].m_node.getCenter();
    }
    if (ns.width < 10)
      {
	ns.width = 10;
      }
    if (ns.height < 10)
      {
	ns.height = 10;
      }
    
    np.width = (leftCenter - leftmost + rightmost - rightCenter) / 2 + 15;
    np.height = (highest - highTop) / 2 + 20;
  }

  /**
   * Performs the action associated with the ActionEvent.
   *
   * @param e the action event.
   */
  public void actionPerformed(ActionEvent e) {
    
    //JMenuItem m = (JMenuItem)e.getSource();
    
    if (e.getActionCommand() == null) {
      if (m_scaling == 0) {
	repaint();
      }
      else {
	animateScaling(m_nViewPos, m_nViewSize, m_scaling);
      }
    }
    else if (e.getActionCommand().equals("Fit to Screen")) {
      
      Dimension np = new Dimension();
      Dimension ns = new Dimension();

      getScreenFit(np, ns);

      animateScaling(np, ns, 10);
      
    }
    else if (e.getActionCommand().equals("Center on Top Node")) {
      
      int tpx = (int)(m_topNode.getCenter() * m_viewSize.width);   //calculate
      //the top nodes postion but don't adjust for where 
      int tpy = (int)(m_topNode.getTop() * m_viewSize.height);     //view is
      
      
      
      Dimension np = new Dimension(getSize().width / 2 - tpx, 
				   getSize().width / 6 - tpy);
      
      animateScaling(np, m_viewSize, 10);
      
    }
    else if (e.getActionCommand().equals("Auto Scale")) {
      autoScale();  //this will figure the best scale value 
      //keep the focus on the middle of the screen and call animate
    }
    else if (e.getActionCommand().equals("Visualize The Node")) {
      //send the node data to the visualizer 
      if (m_focusNode >= 0) {
	Instances inst;
	if ((inst = m_nodes[m_focusNode].m_node.getInstances()) != null) {
	  VisualizePanel pan = new VisualizePanel();
	  pan.setInstances(inst);
	  JFrame nf = new JFrame();
	  nf.setSize(400, 300);
	  nf.getContentPane().add(pan);
	  nf.setVisible(true);
	}
	else {
	  JOptionPane.showMessageDialog(this, "Sorry, there is no " + 
					"availble Instances data for " +
					"this Node.", "Sorry!",
					JOptionPane.WARNING_MESSAGE); 
	}
      }
      else {
	JOptionPane.showMessageDialog(this, "Error, there is no " + 
				      "selected Node to perform " +
				      "this operation on.", "Error!",

⌨️ 快捷键说明

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