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

📄 astpanel.java

📁 检查Java程序漏洞
💻 JAVA
字号:
package net.sourceforge.pmd.util.viewer.gui;

import net.sourceforge.pmd.ast.Node;
import net.sourceforge.pmd.ast.SimpleNode;
import net.sourceforge.pmd.util.viewer.gui.menu.ASTNodePopupMenu;
import net.sourceforge.pmd.util.viewer.model.ASTModel;
import net.sourceforge.pmd.util.viewer.model.ViewerModel;
import net.sourceforge.pmd.util.viewer.model.ViewerModelEvent;
import net.sourceforge.pmd.util.viewer.model.ViewerModelListener;
import net.sourceforge.pmd.util.viewer.util.NLS;

import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.LinkedList;


/**
 * tree panel GUI
 *
 * @author Boris Gruschko ( boris at gruschko.org )
 * @version $Id: ASTPanel.java,v 1.3 2004/04/15 18:21:58 tomcopeland Exp $
 */
public class ASTPanel
  extends JPanel
  implements ViewerModelListener, TreeSelectionListener
{
  private ViewerModel model;
  private JTree       tree;

  /**
   * constructs the panel
   *
   * @param model model to attach the panel to
   */
  public ASTPanel( ViewerModel model )
  {
    this.model = model;

    init(  );
  }

  private void init(  )
  {
    model.addViewerModelListener( this );

    setBorder(
      BorderFactory.createTitledBorder(
        BorderFactory.createEtchedBorder(  ), NLS.nls( "AST.PANEL.TITLE" ) ) );

    setLayout( new BorderLayout(  ) );

    tree = new JTree( (TreeNode)null );

    tree.addTreeSelectionListener( this );

    tree.addMouseListener(
      new MouseAdapter(  )
      {
        public void mouseReleased( MouseEvent e )
        {
          if ( e.isPopupTrigger(  ) )
          {
            TreePath path =
              tree.getClosestPathForLocation( e.getX(  ), e.getY(  ) );
            tree.setSelectionPath( path );

            JPopupMenu menu =
              new ASTNodePopupMenu(
                model, (SimpleNode)path.getLastPathComponent(  ) );

            menu.show( tree, e.getX(  ), e.getY(  ) );
          }
        }
      } );

    add( new JScrollPane( tree ), BorderLayout.CENTER );
  }

  /**
   * @see org.gruschko.pmd.viewer.model.ViewerModelListener#viewerModelChanged(org.gruschko.pmd.viewer.model.ViewerModelEvent)
   */
  public void viewerModelChanged( ViewerModelEvent e )
  {
    switch ( e.getReason(  ) )
    {
      case ViewerModelEvent.CODE_RECOMPILED :
        tree.setModel( new ASTModel( model.getRootNode(  ) ) );

        break;

      case ViewerModelEvent.NODE_SELECTED :

        if ( e.getSource(  ) != this )
        {
          LinkedList list = new LinkedList(  );

          for (
            Node node = (Node)e.getParameter(  ); node != null;
              node = node.jjtGetParent(  ) )
            list.addFirst( node );

          TreePath path = new TreePath( list.toArray(  ) );

          tree.setSelectionPath( path );

          tree.scrollPathToVisible( path );
        }

        break;
    }
  }

  /**
   * @see javax.swing.event.TreeSelectionListener#valueChanged(javax.swing.event.TreeSelectionEvent)
   */
  public void valueChanged( TreeSelectionEvent e )
  {
    model.selectNode(
      (SimpleNode)e.getNewLeadSelectionPath(  ).getLastPathComponent(  ), this );
  }
}


/*
 * $Log: ASTPanel.java,v $ * Revision 1.3  2004/04/15 18:21:58  tomcopeland * Cleaned up imports with new version of IDEA; fixed some deprecated Ant junx *
 * Revision 1.2  2003/09/23 20:51:06  tomcopeland
 * Cleaned up imports
 *
 * Revision 1.1  2003/09/23 20:32:42  tomcopeland
 * Added Boris Gruschko's new AST/XPath viewer
 *
 * Revision 1.1  2003/09/24 01:33:03  bgr
 * moved to a new package
 *
 * Revision 1.3  2003/09/24 00:40:35  bgr
 * evaluation results browsing added
 *
 * Revision 1.2  2003/09/23 07:52:16  bgr
 * menus added
 *
 * Revision 1.1  2003/09/22 05:21:54  bgr
 * initial commit
 *
 */

⌨️ 快捷键说明

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