在Java中如何用Jtree由数字路径建一个树

在java中如何响应单击JTree树中一个节点?~

我给你写了一个例子 你看看吧 你看了就明白了

package tree;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.Event;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.beans.beancontext.BeanContext;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;

import com.sun.xml.internal.messaging.saaj.packaging.mime.util.BEncoderStream;

public class MainFrame extends JFrame {


public static void main(String args[]) {
try {
MainFrame frame = new MainFrame();
Dimension frameSize = frame.getSize();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
if(frameSize.width>screenSize.width){
frameSize.width=screenSize.width;
}
if(frameSize.height>screenSize.height){
frameSize.height=screenSize.height;
}

frame.setLocation((screenSize.width-frameSize.width)/2, (screenSize.height-frameSize.height)/2);

frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}

private JTree tree;
private DefaultMutableTreeNode root = new DefaultMutableTreeNode("语言");
private DefaultMutableTreeNode menu_accp = new DefaultMutableTreeNode("英语");
private DefaultMutableTreeNode menu_benet = new DefaultMutableTreeNode("法语");
private DefaultMutableTreeNode menu_accp_s1 = new DefaultMutableTreeNode("4级");
private DefaultMutableTreeNode menu_accp_s2 = new DefaultMutableTreeNode("6级");
private DefaultMutableTreeNode menu_accp_y2 = new DefaultMutableTreeNode("8级");


private JTextField txtParent;
private JTextField txtNode;
private JTextField txtType;
private JTextField txtChild;
private JPopupMenu popupMenu;

/**
* Create the frame
*/
public MainFrame() {
super();
getContentPane().setLayout(null);
setBounds(100, 100, 535, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

final JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(24, 10, 173, 317);
getContentPane().add(scrollPane);
tree = new JTree(root);
tree.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if(e.getModifiers()==Event.META_MASK){
addPopup(getContentPane(), popupMenu);
popupMenu.show(getContentPane(),e.getX()+30,e.getY()+40);
}
}
});
tree.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
Object nodeInfo = node.getUserObject();

if(node.isRoot()){
txtParent.setText("");
txtNode.setText(nodeInfo.toString());
txtType.setText("根节点");
txtChild.setText(node.getChildCount() + "");
}else{
txtParent.setText(node.getParent().toString());
txtNode.setText(nodeInfo.toString());
if(node.isLeaf()){
txtType.setText("叶节点");
}else{
txtType.setText("枝节点");
}
txtChild.setText(node.getChildCount() + "");
}

}
});
scrollPane.setViewportView(tree);

txtParent = new JTextField();
txtParent.setBounds(339, 49, 90, 21);
getContentPane().add(txtParent);

txtNode = new JTextField();
txtNode.setBounds(339, 107, 90, 21);
getContentPane().add(txtNode);

txtType = new JTextField();
txtType.setBounds(339, 167, 90, 21);
getContentPane().add(txtType);

txtChild = new JTextField();
txtChild.setBounds(339, 231, 90, 21);
getContentPane().add(txtChild);

final JLabel label = new JLabel();
label.setText("父类型节点");
label.setBounds(225, 49, 90, 15);
getContentPane().add(label);

final JLabel label_1 = new JLabel();
label_1.setText("节点的名称");
label_1.setBounds(225, 107, 90, 15);
getContentPane().add(label_1);

final JLabel label_2 = new JLabel();
label_2.setText("节点的类型");
label_2.setBounds(225, 167, 90, 15);
getContentPane().add(label_2);

final JLabel label_3 = new JLabel();
label_3.setText("子节点的个数");
label_3.setBounds(225, 231, 90, 15);
getContentPane().add(label_3);

popupMenu = new JPopupMenu();


final JMenuItem menuItem = new JMenuItem();
menuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
model.removeNodeFromParent(node);
}
});
menuItem.setText("删除");
popupMenu.add(menuItem);
//
}

private static void addPopup(Component component, final JPopupMenu popup) {
component.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if (e.isPopupTrigger())
showMenu(e);
}
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger())
showMenu(e);
}
private void showMenu(MouseEvent e) {
popup.show(e.getComponent(), e.getX(), e.getY());
}
});
}
}

JTree 默认地使用 DefaultMutableTreeNode,这里面有个 UserObject 可以用来存放你的数据,单击是通过 selectionListener 来实现的。

看下面这个例子,抄人家的代码试验一下就明白了。
http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html

public class leaf{
leaf left;//左节点
leaf right;//右节点
int length;//深度
leaf par;//父节点
public leaf(int l,leaf p){
par=p;
length=l;
}
}

这就是一个简单的了 还是不是很清楚楼主的意思

java中jtree双击叶节点如何获取该文件所在的路径
答:{ treeNode.add(new DefaultMutableTreeNode(node.getNodeValue())); //如果该节点没有孩子节点,那么直接加到节点下 } } } } } } } return treeNode; //返回节点 }使用Java的Swing包里的方法能够很容易地在JTree...

java问题,关于JTree子节点显示图片问题(高分!)
答:package 易度网17;import javax.swing.*;import javax.swing.tree.*;import java.awt.*;import java.awt.event.*;public class 使用DefaultTreeCellRenderer extends JApplet { static private Icon openFolder = new ...

谁能详细介绍一下java swing里的JTable JTree是怎样用的以及他们的方法...
答:-javax.swing.JWindow -java.awt.Applet-javax.swing.JApplet -javax.swing.Box -javax.swing.Jcomponet swing包是Swing提供的最大包,它包含将近100个类和25个接口,几乎所有的Swing组件都在swing包中,只有JtableHeader和...

java中,JTree的枝结点一般是双击展开子树,如何实现单击展开?
答:tree.on('click', function(node){ if(!node.isLeaf()){ node.toggle(); } });

java中jtree双击叶节点如何获取该文件所在的路径
答:1.函数isLeaf()判断是否为叶节点。2.方法一:写一个类继承DefaultMutableTreeNode,里面加一个路径变量,双击的时候取出该路径变量 方法二:将DefaultMutableTreeNode 设置其节点的text为路径,用的时候取出来。

java语言请教
答://没有导入 import javax.swing.tree.DefaultMutableTreeNode;import java.awt.BorderLayout;import java.awt.Dimension;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTree;import java.awt.*;i...

JAVA swing界面编程,怎么实现点击左边的树节点,然后在右边刷新界面,显 ...
答:我写过一个类似效果的阅读器, 用于记录笔记,或者阅读小说; 使用的组件是JTree ;JTree添加一个选择事件的响应器,然后根据事件获取到当前选择的树节点,. 然后读取对应的文字或者图片; 关键代码如下:jt.addTreeSelectionListener...

java swing jtree 什么是树的数据模型
答:除父节点和子节点外,树的节点还有一个用户对象(当使用DefaultTreeModel时就会呈现一个用户对象)。用户对象是Object类型,因此它提供了一个将任意对象与节点相关联的办法。树有一个简单的模型,每一个JTree实例都要维护对绘制...

Java中有没有现成的树形结构的类
答:树时用来存储东西的,如果非要说类似的类,那么应该是treemap和treeset应该是使用的avl平衡二叉树实现的。其他的,好像暂时没有发现。正常算法使用的树,都是用的node里面存放引用来实现的。

java JTree如何监听双击事件
答:我以前用过一种方法:就是JTree.addMouseListener就可以了。然后在mouseClicked(MouseEvent e)方法中通过下面的方法获取所选的结点 TreePath path = testTree.getPathForLocation(e.getX(), e.getY());TreeNode node = ...

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网