iteye_12241 2011-03-04 16:39
浏览 288
已采纳

关于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]

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

开始是颗空树!

  • 写回答

2条回答 默认 最新

  • iteye_20450 2011-03-08 16:07
    关注

    还是重写个吧,希望帮得到楼主。 实例代码:
    [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]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!