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

📄 treevisualizer.java

📁 wekaUT是 university texas austin 开发的基于weka的半指导学习(semi supervised learning)的分类器
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
/* *    This program is free software; you can redistribute it and/or modify *    it under the terms of the GNU General Public License as published by *    the Free Software Foundation; either version 2 of the License, or *    (at your option) any later version. * *    This program is distributed in the hope that it will be useful, *    but WITHOUT ANY WARRANTY; without even the implied warranty of *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *    GNU General Public License for more details. * *    You should have received a copy of the GNU General Public License *    along with this program; if not, write to the Free Software *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *//* *    TreeVisualizer.java *    Copyright (C) 1999 Malcolm Ware * */package weka.gui.treevisualizer;import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.io.*;import weka.core.Instances;import weka.gui.visualize.VisualizePanel;import weka.gui.visualize.VisualizePanelListener;import weka.gui.visualize.VisualizePanelEvent;/** * Class for displaying a Node structure in Swing. <p> * * To work this class simply create an instance of it.<p> * * Assign it to a window or other such object.<p> * * Resize it to the desired size.<p> * * * When using the Displayer hold the left mouse button to drag the  * tree around. <p> * * Click the left mouse button with ctrl to shrink the size of the tree  * by half. <p> * * Click and drag with the left mouse button and shift to draw a box, * when the left mouse button is released the contents of the box  * will be magnified  * to fill the screen. <p> <p> * * Click the right mouse button to bring up a menu. <p> * Most options are self explanatory.<p> * * Select Auto Scale to set the tree to it's optimal display size. * * @author Malcolm Ware (mfw4@cs.waikato.ac.nz) * @version $Revision: 1.1.1.1 $ */public class TreeVisualizer extends JPanel implements MouseMotionListener,			       MouseListener,ActionListener,ItemListener {  /** The placement algorithm for the Node structure. */  private NodePlace m_placer;    /** The top Node. */  private Node m_topNode;    /** The postion of the view relative to the tree. */  private Dimension m_viewPos;          /** The size of the tree in pixels. */  private Dimension m_viewSize;          /** The font used to display the tree. */  private Font m_currentFont;          /** The size information for the current font. */  private FontMetrics m_fontSize;      /** The number of Nodes in the tree. */  private int m_numNodes;  /** The number of levels in the tree. */  private int m_numLevels;       /** An array with the Nodes sorted into it and display information    * about the Nodes. */  private NodeInfo[] m_nodes;  /** An array with the Edges sorted into it and display information    * about the Edges. */  private EdgeInfo[] m_edges;                       /** A timer to keep the frame rate constant. */  private Timer m_frameLimiter;                                 /** Describes the action the user is performing. */  private int m_mouseState;             /** A variable used to tag the start pos of a user action. */  private Dimension m_oldMousePos;  /** A variable used to tag the most current point of a user action. */  private Dimension m_newMousePos;  /** A variable used to determine for the clicked method if any other    * mouse state has already taken place. */  private boolean m_clickAvailable;  /** A variable used to remember the desired view pos. */  private Dimension m_nViewPos;       /** A variable used to remember the desired tree size. */  private Dimension m_nViewSize;         /** The number of frames left to calculate. */  private int m_scaling;           /** A right (or middle) click popup menu. */  private JPopupMenu m_winMenu;  /** An option on the win_menu */  private JMenuItem m_topN;  /** An option on the win_menu*/  private JMenuItem m_fitToScreen;  /** An option on the win_menu */  private JMenuItem m_autoScale;  /** A ub group on the win_menu */  private JMenu m_selectFont;  /** A grouping for the font choices */  private ButtonGroup m_selectFontGroup;  /** A font choice. */  private JRadioButtonMenuItem m_size24;  /** A font choice. */  private JRadioButtonMenuItem m_size22;  /** A font choice. */  private JRadioButtonMenuItem m_size20;  /** A font choice. */  private JRadioButtonMenuItem m_size18;  /** A font choice. */  private JRadioButtonMenuItem m_size16;  /** A font choice. */  private JRadioButtonMenuItem m_size14;  /** A font choice. */  private JRadioButtonMenuItem m_size12;  /** A font choice. */  private JRadioButtonMenuItem m_size10;  /** A font choice. */  private JRadioButtonMenuItem m_size8;  /** A font choice. */  private JRadioButtonMenuItem m_size6;  /** A font choice. */  private JRadioButtonMenuItem m_size4;  /** A font choice. */  private JRadioButtonMenuItem m_size2;  /** A font choice. */  private JRadioButtonMenuItem m_size1;  /** An option on the win menu. */  private JMenuItem m_accept;  /** A right or middle click popup menu for nodes. */  private JPopupMenu m_nodeMenu;  /** A visualize choice for the node, may not be available. */  private JMenuItem m_visualise;  /**    * An add children to Node choice, This is only available if the tree   * display has a treedisplay listerner added to it.   */  private JMenuItem m_addChildren;  /** Similar to add children but now it removes children. */  private JMenuItem m_remChildren;  /** Use this to have J48 classify this node. */  private JMenuItem m_classifyChild;    /** Use this to dump the instances from this node to the vis panel. */  private JMenuItem m_sendInstances;  /** The subscript for the currently selected node (this is an internal    * thing, so the user is unaware of this). */  private int m_focusNode;  /**   * The Node the user is currently focused on , this is similar to    * focus node except that it is used by other    * classes rather than this one.   */  private int m_highlightNode;    /* A pointer to this tree's classifier if a classifier is using it. */  //private UserClassifier classer;  private TreeDisplayListener m_listener;  private JTextField m_searchString;  private JDialog m_searchWin;  private JRadioButton m_caseSen;  ///////////////////  //this is the event fireing stuff  /**   * Constructs Displayer to display a tree provided in a dot format.   * Uses the NodePlacer to place the Nodes.   * @param tdl listener    * @param dot string containing the dot representation of the tree to   * display   * @param p the algorithm to be used to position the nodes.   */  public TreeVisualizer(TreeDisplayListener tdl, String dot, NodePlace p) {    //generate the node structure in here    setBorder(BorderFactory.createTitledBorder("Tree View"));     m_listener = tdl;    TreeBuild builder = new TreeBuild();        Node n = null;    NodePlace arrange = new PlaceNode2();    n = builder.create(new StringReader(dot));    //    System.out.println(n.getCount(n, 0));    //if the size needs to be automatically alocated I will do it here    m_highlightNode = 5;    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 = m_topNode.getCount(m_topNode,0);   //note the second     //argument must be a zero, this is a     //recursive function    m_numLevels = m_topNode.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);    */

⌨️ 快捷键说明

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