关于JTree的生成问题

[code="java"]package test;

import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeSelectionModel;

import java.awt.BorderLayout;
import java.awt.event.*;

import Node.MiddleNode;

public class TestJTree {

DefaultTreeModel deviceTreeModel = null;
JTree deviceTree = new JTree();
JFrame frame ;

JButton b = new JButton(":");

public TestJTree(){

    frame = new JFrame();
//  deviceTreeModel = new DefaultTreeModel("A");
    DefaultMutableTreeNode root = null;
    deviceTree = new JTree(root);
    b.addActionListener(new ActionListener(){

        @Override
        public void actionPerformed(ActionEvent arg0) {
            // TODO Auto-generated method stub
            System.out.println("d");
            setTree();
        }

    });

//  deviceTree.setVisible(false);
    frame.add(deviceTree,BorderLayout.CENTER);
    frame.add(b,BorderLayout.SOUTH);
    frame.setVisible(true);
    frame.setSize(200, 500);
}



public void setTree(){
    System.out.println("f");
    String root = "Root";
    MiddleNode rootNode = new MiddleNode(root);
    DefaultMutableTreeNode treeRootNode = new DefaultMutableTreeNode(
            rootNode);
    deviceTreeModel = new DefaultTreeModel(treeRootNode);
    deviceTree = new JTree(deviceTreeModel);
    deviceTree.setVisible(true);

    deviceTree.putClientProperty("JTree.lineStyle", "Angled");
    deviceTree.setRowHeight(22);
    deviceTree.getSelectionModel().setSelectionMode(
            TreeSelectionModel.SINGLE_TREE_SELECTION);
    deviceTree.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
}

public static void main(String[] args) {
    new TestJTree();
}

}
[/code]

我希望单击按钮后生成一颗有节点的树,但是没有反应
请问哪里有问题啊?
谢谢啦

开始是颗空树!

还是重写个吧,希望帮得到楼主。 实例代码:
[code="java"]
package prx.swing;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;

public class SimpleJTree

{
JFrame frame = new JFrame("简单树");

JTree tree;
DefaultTreeModel model;

//定义初始节点
DefaultMutableTreeNode root = new DefaultMutableTreeNode("root"); 
DefaultMutableTreeNode child = new DefaultMutableTreeNode("child");

private JButton addSiblingButton;
private JButton addChildButton;

public void init()
{
    initUI();
    initLayout();
    createAction();

    frame.pack();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}

private void initUI() {
    //以根节点创建树
    root.add(child);
    tree = new JTree(root);

    //默认连线
    tree.putClientProperty("JTree.lineStyle" , "Angeled");
    //没有连线

// tree.putClientProperty("JTree.lineStyle" , "None");
//水平分隔线
// tree.putClientProperty("JTree.lineStyle" , "Horizontal");

    //设置是否显示根节点的“展开/折叠”图标,默认是false
    tree.setShowsRootHandles(true);
    //设置节点是否可见,默认是true
    tree.setRootVisible(true);
    //设置JTree可编辑
    tree.setEditable(true);

    model = (DefaultTreeModel)tree.getModel();

    addSiblingButton = new JButton("添加兄弟节点");
    addChildButton = new JButton("添加子节点");
}

private void initLayout() {
    Container container = frame.getContentPane();
    container.add(new JScrollPane(tree));

    JPanel bottom = new JPanel();
    bottom.add(addSiblingButton);
    bottom.add(addChildButton);

    container.add(bottom, BorderLayout.SOUTH);
}

private void createAction() {
    addSiblingButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            //获取选中节点
            DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
            //如果节点为空,直接返回
            if (selectedNode == null) return;
            //获取该选中节点的父节点
            DefaultMutableTreeNode parent = (DefaultMutableTreeNode)selectedNode.getParent();
            //如果父节点为空,直接返回
            if (parent == null) return;
            //创建一个新节点
            DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("新节点");
            //获取选中节点的选中索引
            int selectedIndex = parent.getIndex(selectedNode);
            //在选中位置插入新节点
            model.insertNodeInto(newNode, parent, selectedIndex + 1);
            //--------下面代码实现显示新节点(自动展开父节点)-------
            //获取从根节点到新节点的所有节点
            TreeNode[] nodes = model.getPathToRoot(newNode);
            //使用指定的节点数组来创建TreePath
            TreePath path = new TreePath(nodes);
            //显示指定TreePath
            tree.scrollPathToVisible(path);
        }
    });

    addChildButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            //获取选中节点
            DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
            //如果节点为空,直接返回
            if (selectedNode == null) return;
            //创建一个新节点
            DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("新节点");
            //直接通过model来添加新节点,则无需通过调用JTree的updateUI方法
            //model.insertNodeInto(newNode, selectedNode, selectedNode.getChildCount());
            //直接通过节点添加新节点,则需要调用tree的updateUI方法
            selectedNode.add(newNode);
            //--------下面代码实现显示新节点(自动展开父节点)-------
            TreeNode[] nodes = model.getPathToRoot(newNode);
            TreePath path = new TreePath(nodes);
            tree.scrollPathToVisible(path);
            tree.updateUI();
        }
    });
}

public static void main(String[] args) 
{
    new SimpleJTree().init();
}

}
[/code]

在55行前加一条语句:
[quote]
frame.getContentPane().add(deviceTree,BorderLayout.CENTER);
[/quote]

你这份测试代码写得。。问题多得没法说