树编辑程序

原创 2012年03月22日 10:24:07

以下源码展示了树编辑的实现(源码摘自《Java核心技术II》):

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;


/**
 * This program demonstrates tree editing.
 * @version 1.03 2007-08-01
 * @author Cay Horstmann
 */
public class TreeEditTest
{
   public static void main(String[] args)
   {
      EventQueue.invokeLater(new Runnable()
         {
            public void run()
            {
               JFrame frame = new TreeEditFrame();
               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               frame.setVisible(true);
            }
         });
   }
}


/**
 * A frame with a tree and buttons to edit the tree.
 */
class TreeEditFrame extends JFrame
{
   public TreeEditFrame()
   {
      setTitle("TreeEditTest");
      setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);


      // construct tree


      TreeNode root = makeSampleTree();
      model = new DefaultTreeModel(root);
      tree = new JTree(model);
      tree.setEditable(true);


      // add scroll pane with tree


      JScrollPane scrollPane = new JScrollPane(tree);
      add(scrollPane, BorderLayout.CENTER);


      makeButtons();
   }


   public TreeNode makeSampleTree()
   {
      DefaultMutableTreeNode root = new DefaultMutableTreeNode("World");
      DefaultMutableTreeNode country = new DefaultMutableTreeNode("USA");
      root.add(country);
      DefaultMutableTreeNode state = new DefaultMutableTreeNode("California");
      country.add(state);
      DefaultMutableTreeNode city = new DefaultMutableTreeNode("San Jose");
      state.add(city);
      city = new DefaultMutableTreeNode("San Diego");
      state.add(city);
      state = new DefaultMutableTreeNode("Michigan");
      country.add(state);
      city = new DefaultMutableTreeNode("Ann Arbor");
      state.add(city);
      country = new DefaultMutableTreeNode("Germany");
      root.add(country);
      state = new DefaultMutableTreeNode("Schleswig-Holstein");
      country.add(state);
      city = new DefaultMutableTreeNode("Kiel");
      state.add(city);
      return root;
   }


   /**
    * Makes the buttons to add a sibling, add a child, and delete a node.
    */
   public void makeButtons()
   {
      JPanel panel = new JPanel();
      JButton addSiblingButton = new JButton("Add Sibling");
      addSiblingButton.addActionListener(new ActionListener()
         {
            public void actionPerformed(ActionEvent event)
            {
               DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree
                     .getLastSelectedPathComponent();


               if (selectedNode == null) return;


               DefaultMutableTreeNode parent = (DefaultMutableTreeNode) selectedNode.getParent();


               if (parent == null) return;


               DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("New");


               int selectedIndex = parent.getIndex(selectedNode);
               model.insertNodeInto(newNode, parent, selectedIndex + 1);


               // now display new node


               TreeNode[] nodes = model.getPathToRoot(newNode);
               TreePath path = new TreePath(nodes);
               tree.scrollPathToVisible(path);
            }
         });
      panel.add(addSiblingButton);


      JButton addChildButton = new JButton("Add Child");
      addChildButton.addActionListener(new ActionListener()
         {
            public void actionPerformed(ActionEvent event)
            {
               DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree
                     .getLastSelectedPathComponent();


               if (selectedNode == null) return;


               DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("New");
               model.insertNodeInto(newNode, selectedNode, selectedNode.getChildCount());


               // now display new node


               TreeNode[] nodes = model.getPathToRoot(newNode);
               TreePath path = new TreePath(nodes);
               tree.scrollPathToVisible(path);
            }
         });
      panel.add(addChildButton);


      JButton deleteButton = new JButton("Delete");
      deleteButton.addActionListener(new ActionListener()
         {
            public void actionPerformed(ActionEvent event)
            {
               DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree
                     .getLastSelectedPathComponent();


               if (selectedNode != null && selectedNode.getParent() != null) model
                     .removeNodeFromParent(selectedNode);
            }
         });
      panel.add(deleteButton);
      add(panel, BorderLayout.SOUTH);
   }


   private DefaultTreeModel model;
   private JTree tree;
   private static final int DEFAULT_WIDTH = 400;
   private static final int DEFAULT_HEIGHT = 200;
}

Ruby中的类编程

1.在Ruby中定义类 在 Ruby 中,类总是以关键字 class 开始,后跟类的名称。类名的首字母应该大写。类 Customer 如下所示: class Customer end您可以使用关键字...
  • wangjianno2
  • wangjianno2
  • 2016年05月22日 19:05
  • 176

win7中专用字符编辑器中的字符怎么复制到word中?

在xp系统中,造出来的字可用区位输入法来输入,但win7没有区位输入法,又该怎样输入呢? 1、点击开始→所有程序→附件→系统工具→专用字符编辑器; 2、选一个空白的方格,点击确定; 3、...
  • maoxiaojiemaoxiaojie
  • maoxiaojiemaoxiaojie
  • 2017年05月28日 08:34
  • 372

Delphi编程实现程序快捷方式[原创]

                                     Delphi编程实现程序快捷方式[原创]                                           ...
  • romanticonline
  • romanticonline
  • 2002年03月29日 09:04
  • 544

FreeBSD下VI编辑器的使用(转)

vi 是所有unix-like都有的编辑器...不用额外安装让您在不同系统上也能够很快的进入状况.1.概说若您之前不曾使用过全屏幕的编辑器,那么您可能连一些简单的编辑都有问题.如此您可能要找一个已经稍...
  • xuuiao
  • xuuiao
  • 2011年04月30日 09:37
  • 909

C语言顺序程序设计详解(scanf,printf,getchar,putchar等函数)

一、C语言语句概述: C语句分为以下五类: :表达式语句->表达式语句由表达式加上分号“;”组成。 :函数调用语句->由函数名、实际参数加上分号“;”组成。 :控制语句-> ...
  • grassroots2011
  • grassroots2011
  • 2012年07月10日 14:08
  • 2357

修改图片右键菜单的“编辑”程序

bmp图片项:HKEY_CLASSES_ROOT\Paint.Picture\shell\edit\command 键:(默认) 类:REG_EXPEND_SZ 值:”programpath” ...
  • chenrylee
  • chenrylee
  • 2016年12月06日 12:02
  • 725

c++经典-表白代码-编程

作为一个程序初学者,虽然写不了大程序,但业余时间写写一些娱乐软件还是可以的! 如下就是我准备写给一个女生的! #include #include using namespace std; in...
  • qq_41155209
  • qq_41155209
  • 2018年01月08日 14:03
  • 21

堆栈应用之行编辑程序

#include #include using namespace std; #define STACKSIZE 10 #define SIZEADD 5 typedef char ElemType;...
  • hgeternal
  • hgeternal
  • 2014年10月10日 09:13
  • 251

Unix操作系统基础:编辑程序Vi

Unix操作系统基础:编辑程序Vi 1. 概述    1. 编辑器的基本工作流程:      磁盘文件系统-——(读入已有文件或建立新文件)      ———〉内存编辑缓冲区(编辑文件)———...
  • sheqiguo
  • sheqiguo
  • 2012年03月16日 19:28
  • 326

Emacs编辑程序常用命令

1 定位命令2 格式重排3 注释4 自动补全命令5 浏览程序大纲(hs-minor-mode)6 其他工具6.1 imenu菜单6.2 which-func-mode6.3 show-paren-mo...
  • lujun9972
  • lujun9972
  • 2015年05月26日 07:32
  • 864
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:树编辑程序
举报原因:
原因补充:

(最多只允许输入30个字)