当前位置:编程学习 > JAVA >>

jtree,隐藏根后添加第一层枝不显示。


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

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

public class JtreeTest extends JFrame
{
private static int i = 1;

private DefaultMutableTreeNode root;
private DefaultTreeModel treeModel;
private JTree tree;

public JtreeTest()
{
root = new DefaultMutableTreeNode("默认根");

// 利用根节点创建TreeModel
this.treeModel = new DefaultTreeModel(root);

tree = new JTree(treeModel);
//  tree.setRootVisible(false); // 设置树的系统根不可见

DefaultMutableTreeNode node0 = new DefaultMutableTreeNode("文件0");
treeModel.insertNodeInto(node0, root, root.getChildCount());
tree.expandRow(0);

JScrollPane treeScrollPane = new JScrollPane(tree);
this.getContentPane().add(treeScrollPane, BorderLayout.SOUTH);

JButton btn = new JButton("增加树枝");
btn.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
String temp = "文件" + i++;
DefaultMutableTreeNode node1 = new DefaultMutableTreeNode(temp);

JtreeTest.this.treeModel.insertNodeInto(node1, root, root.getChildCount());

JtreeTest.this.tree.updateUI();

System.out.println(temp);
}
});
this.getContentPane().add(btn, BorderLayout.NORTH);

this.setTitle("树形菜单");
this.pack();
this.setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

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






未隐藏根如上图,按按钮可以添加枝

但是隐藏根后,默认的文件0都不显示了,按钮后界面没变化,但是输出能看到事件还是执行了

Jtree listener Java SE --------------------编程问答--------------------

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

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

public class JtreeTest extends JFrame {
private static int i = 1;

private DefaultMutableTreeNode root;
private DefaultTreeModel treeModel;
private JTree tree;

public JtreeTest() {
root = new DefaultMutableTreeNode("默认根");

// 利用根节点创建TreeModel
this.treeModel = new DefaultTreeModel(root);

tree = new JTree(treeModel);
tree.setRootVisible(false); // 设置树的系统根不可见

DefaultMutableTreeNode node0 = new DefaultMutableTreeNode("文件0");
treeModel.insertNodeInto(node0, root, root.getChildCount());
tree.expandRow(0);

JScrollPane treeScrollPane = new JScrollPane(tree);
this.getContentPane().add(treeScrollPane, BorderLayout.SOUTH);

JButton btn = new JButton("增加树枝");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String temp = "文件" + i++;
DefaultMutableTreeNode node1 = new DefaultMutableTreeNode(temp);

JtreeTest.this.treeModel.insertNodeInto(node1, root, root.getChildCount());

JtreeTest.this.tree.updateUI();

System.out.println(temp);
}
});
this.getContentPane().add(btn, BorderLayout.NORTH);

this.setTitle("树形菜单");
this.pack();
this.setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

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


测试没问题:

--------------------编程问答--------------------
引用 1 楼 huxiweng 的回复:

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

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

public class JtreeTest extends JFrame {
private static int i = 1;

private DefaultMutableTreeNode root;
private DefaultTreeModel treeModel;
private JTree tree;

public JtreeTest() {
root = new DefaultMutableTreeNode("默认根");

// 利用根节点创建TreeModel
this.treeModel = new DefaultTreeModel(root);

tree = new JTree(treeModel);
tree.setRootVisible(false); // 设置树的系统根不可见

DefaultMutableTreeNode node0 = new DefaultMutableTreeNode("文件0");
treeModel.insertNodeInto(node0, root, root.getChildCount());
tree.expandRow(0);

JScrollPane treeScrollPane = new JScrollPane(tree);
this.getContentPane().add(treeScrollPane, BorderLayout.SOUTH);

JButton btn = new JButton("增加树枝");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String temp = "文件" + i++;
DefaultMutableTreeNode node1 = new DefaultMutableTreeNode(temp);

JtreeTest.this.treeModel.insertNodeInto(node1, root, root.getChildCount());

JtreeTest.this.tree.updateUI();

System.out.println(temp);
}
});
this.getContentPane().add(btn, BorderLayout.NORTH);

this.setTitle("树形菜单");
this.pack();
this.setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

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


测试没问题:



版主,我又去运行到看了,还是出不来,请问下可能会是什么原因引起的呢?

JDK1.7.0.25 会不会是这个引起的?
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,