[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]
你这份测试代码写得。。问题多得没法说