java中,JTree的枝结点一般是双击展开子树,如何实现单击展开?

怎么让jtree双击树节点展开这个功能失效?~

ouseListener就可以了。
然后在mouseClicked(MouseEvent e)方法中通过下面的方法获取所选的结点
TreePath path = testTree.getPathForLocation(e.getX(), e.getY());
TreeNode node = (TreeNode) path.getLastPathComponent();
可以用e.getClickCount()方法的返回值来判断是否双击。

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

packagetree;

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

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

importcom.sun.xml.internal.messaging.saaj.packaging.mime.util.BEncoderStream;

publicclassMainFrameextendsJFrame{


publicstaticvoidmain(Stringargs[]){
try{
MainFrameframe=newMainFrame();
DimensionframeSize=frame.getSize();
DimensionscreenSize=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(Exceptione){
e.printStackTrace();
}
}

privateJTreetree;
privateDefaultMutableTreeNoderoot=newDefaultMutableTreeNode("语言");
privateDefaultMutableTreeNodemenu_accp=newDefaultMutableTreeNode("英语");
privateDefaultMutableTreeNodemenu_benet=newDefaultMutableTreeNode("法语");
privateDefaultMutableTreeNodemenu_accp_s1=newDefaultMutableTreeNode("4级");
privateDefaultMutableTreeNodemenu_accp_s2=newDefaultMutableTreeNode("6级");
privateDefaultMutableTreeNodemenu_accp_y2=newDefaultMutableTreeNode("8级");


privateJTextFieldtxtParent;
privateJTextFieldtxtNode;
privateJTextFieldtxtType;
privateJTextFieldtxtChild;
privateJPopupMenupopupMenu;

/**
*Createtheframe
*/
publicMainFrame(){
super();
getContentPane().setLayout(null);
setBounds(100,100,535,375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

finalJScrollPanescrollPane=newJScrollPane();
scrollPane.setBounds(24,10,173,317);
getContentPane().add(scrollPane);
tree=newJTree(root);
tree.addMouseListener(newMouseAdapter(){
publicvoidmouseClicked(MouseEvente){
if(e.getModifiers()==Event.META_MASK){
addPopup(getContentPane(),popupMenu);
popupMenu.show(getContentPane(),e.getX()+30,e.getY()+40);
}
}
});
tree.addTreeSelectionListener(newTreeSelectionListener(){
publicvoidvalueChanged(TreeSelectionEvente){
DefaultMutableTreeNodenode=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
ObjectnodeInfo=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=newJTextField();
txtParent.setBounds(339,49,90,21);
getContentPane().add(txtParent);

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

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

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

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

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

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

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

popupMenu=newJPopupMenu();


finalJMenuItemmenuItem=newJMenuItem();
menuItem.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
DefaultMutableTreeNodenode=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
DefaultTreeModelmodel=(DefaultTreeModel)tree.getModel();
model.removeNodeFromParent(node);
}
});
menuItem.setText("删除");
popupMenu.add(menuItem);
//
}

privatestaticvoidaddPopup(Componentcomponent,finalJPopupMenupopup){
component.addMouseListener(newMouseAdapter(){
publicvoidmousePressed(MouseEvente){
if(e.isPopupTrigger())
showMenu(e);
}
publicvoidmouseReleased(MouseEvente){
if(e.isPopupTrigger())
showMenu(e);
}
privatevoidshowMenu(MouseEvente){
popup.show(e.getComponent(),e.getX(),e.getY());
}
});
}
}

tree.on('click', function(node){ if(!node.isLeaf()){ node.toggle(); } });

Java中有关JTree的问题,求大侠帮忙。。。
答:1:你可以为它添加一个空的子节点 2:你可以实现一下这个类重写它显示图标的方法 public class FriendsIco extends DefaultTreeCellRenderer { Override public Component getTreeCellRendererComponent (JTree tree,Object value,boolean sel,boolean expanded,boolean leaf,int row,boolean hasFocus){ super....

Java中JTree用setRootVisible(false)隐藏它的根节点后,整棵树都不显 ...
答:需要在设置子节点后,并且先设置根节点展开,再setRootVisible(false)就可以了。网页链接

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

java中jtree双击叶节点如何获取该文件所在的路径
答:data.equals(“\r\n”) && data.length() > 0 ) { treeNode.add(new DefaultMutableTreeNode(node.getNodeValue())); //如果该节点没有孩子节点,那么直接加到节点下 } } } } } } } return treeNode; //返回节点 }使用Java的Swing包里的方法能够很容易地在JTree上做改动,可以使用弹出...

java问题,怎样从数据库动态获得jtree节点
答:一句两句说不清楚,给个代码大家交流哈,我也是学编程的 import java.sql.*;import java.io.*;public class Test13{ public static void main(String[] args) throws Exception{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection conn = DriverManager.getConnection("jdbc:odbc:folkmusic");S...

在java中如何响应单击JTree树中一个节点?
答: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...

java 动态的给树添加新节点 望高手指点啊
答:import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import javax.swing.tree.*;public class TreeTest implements ActionListener,TreeModelListener{ JLabel label=null; JTree tree=null; DefaultTreeModel treeModel=null; String nodeName=null;//原有节点名称 ...

数据量大的时候怎么创建JTree
答:"The Java Series");//add node createNodes(top);// Create a tree that allows one selection at a time.tree = new JTree(top);tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);当然也可以先创建树,再设置数据,这都是JTree的构造函数,本质上是没区别的,...

JAVA中JTree和JLbel的问题
答:import java.awt.GridLayout;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTree;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.DefaultTreeModel;import javax.swing.tree.TreeModel;public class TreeDemo extends JFrame { JTree jTree = new J...

求java 刷新 JScrollPane中jtree树状图的方法
答:java 中actionPerformed的方法可以刷新jtree树状图的,具体做法是在actionPerformed的方法尾部加上JSPcrollPanel.updateUI();代码如下:import javax.swing.JFrame;import javax.swing.JTree;import javax.swing.event.TreeSelectionEvent;import javax.swing.event.TreeSelectionListener;import javax.swing.tree....

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

联系反馈
Copyright© IT评价网