`

Java Swing JTree获取选中节点、父节点、子节点

 
阅读更多

package org.dm.swingTest;

 

import java.awt.EventQueue;

import java.awt.event.InputEvent;

 

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JTree;import javax.swing.border.EmptyBorder;

import javax.swing.event.TreeSelectionEvent;

import javax.swing.event.TreeSelectionListener;

import javax.swing.tree.DefaultMutableTreeNode;

import javax.swing.tree.TreePath;

import javax.swing.JScrollPane;

import javax.swing.JTextField;

 

public class AppDemo extends JFrame {

 

 private JPanel contentPane;

 private JTextField textField;

 public static void main(String[] args) {

  EventQueue.invokeLater(new Runnable() {

   public void run() {

    try {

     AppDemo frame = new AppDemo();

     frame.setVisible(true);

    } catch (Exception e) {

     e.printStackTrace();

    }

   }

  });

 }

 

 public AppDemo() {

  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  setBounds(100, 100, 450, 300);

  setTitle("测试");

  contentPane = new JPanel();

  contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

  setContentPane(contentPane);

  contentPane.setLayout(null);

    JScrollPane scrollPane = new JScrollPane();

  scrollPane.setBounds(30, 20, 196, 217);

  contentPane.add(scrollPane);

    final JTree tree = new JTree();

  scrollPane.setViewportView(tree);    textField = new JTextField();

  textField.setBounds(252, 35, 172, 27);

  contentPane.add(textField);

  tree.addTreeSelectionListener(new TreeSelectionListener() {

   public void valueChanged(TreeSelectionEvent e) {//当我们在JTree上点选任何一个节点,都会触发TreeSelectionEvent事件

  //根据数字 0、1、2··区分根节点、子节点

//   int z = tree.getSelectionCount();

//   System.out.println(z);

//   String name=((DefaultMutableTreeNode) tree.getSelectionPath().getPathComponent(z)).toString();

  //获取当前节点和前面所有节点的值

//    TreePath note = tree.getSelectionPath();

  //获取当前选择节点的值

  //方法一

       DefaultMutableTreeNode note = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();

//     String name = note.toString();//获得这个结点的名称

  //方法2

//   String name=((DefaultMutableTreeNode) tree.getSelectionPath().getLastPathComponent()).toString();

  // 获取选中节点的父节点

  DefaultMutableTreeNode parent = (DefaultMutableTreeNode) note.getParent();

  //获取父节点的子节点(首个子节点和最后一个子节点)

  DefaultMutableTreeNode FirstChild = (DefaultMutableTreeNode) note.getFirstChild();

  DefaultMutableTreeNode LastChild = (DefaultMutableTreeNode) note.getLastChild();

  System.out.println("选中节点的子节点"+FirstChild.toString());

  if (parent == null) {

  return;

  }

  // 获取选中节点的节点索引

  int selectedIndex = parent.getIndex(note);

//   System.out.println("选中节点的节点索引:"+selectedIndex);

           textField.setText(parent.toString());

       

 // 判断是否为树叶节点,若是则显示文件内容,若不是则不做任何事。

// if (note.isLeaf()) {

// /*

// * 取得文件的位置路径,System.getProperty("user.dir")可以取得目前工作的路径,

// * System.getProperty("file.separator")是取得文件分隔符,例如在window环境的

// * 文件分陋符是"\",而Unix环境的文件分隔符刚好相反,是"/".利用System.getProperty()

// * 方法你可以取得下列的信息: java.version 显示java版本 java.endor 显示java制造商

// * java.endor.url 显示java制造商URL java.home 显示java的安装路径

// * java.class.version 显示java类版本 java.class.path 显示java classpath

// * os.name 显示操作系统名称 os.arch 显示操作系统结构,如x86 os.version 显示操作系统版本

// * file.separator 取得文件分隔符 path.separator 取得路径分隔符,如Unix是以“:”表示

// * line.separator 取得换行符号,如Unix是以"\n"表示 user.name 取得用户名称 user.home

// * 取得用户家目录(home directory),如Windows中Administrator的家目 录为c:\Documents

// * and Settings\Administrator user.dir 取得用户目前的工作目录.

// */

// String filepath = "file:" + System.getProperty("user.dir")

// + System.getProperty("file.separator") + note;

// System.out.println(filepath);

//// try {

//// // 利用JEditorPane的setPage()方法将文件内容显示在editorPane中。若文件路径错误,则会产生IOException.

//// editorPane.setPage(filepath);

//// } catch (IOException ex) {

//// System.out.println("找不到此文件");

//// }

// }

   }

  });

  //添加鼠标事件

  tree.addMouseListener(new java.awt.event.MouseAdapter() {

      public void mouseClicked(java.awt.event.MouseEvent evt) {

//        默认单击鼠标一下

//          if(evt.getClickCount()==1){

//             System.out.println("一下");

//          }

     //点击鼠标左键两下

//      1 左键

//      2 中键(Sun Mouse)

//      3 右键

          if(evt.getModifiers()==InputEvent.BUTTON1_MASK && evt.getClickCount()==2) {

              System.out.println("两下");

          }

      }

  });

 }

}

分享到:
评论

相关推荐

    java swing-jtree的用法

    TreeNode定义了一系列方法,如`getChildCount()`用来获取子节点的数量,`getParent()`获取父节点,以及判断是否为叶子节点等。在实际编程中,我们很少直接实现TreeNode接口,而是选择使用DefaultMutableTreeNode类,...

    java Swing带复选框的树

    6. **自定义TreeModel**:如果需要更复杂的逻辑,例如根据父节点的选中状态自动改变子节点的状态,可能需要创建一个自定义的TreeModel。这可能涉及到实现DefaultTreeModel或直接扩展AbstractTreeModel。 7. **Swing...

    JTree(节点带有checkbox)代码实例

    在Java Swing库中,`JTree`组件是一个用于展示树形数据结构的可视化元素,它允许用户通过交互来浏览和操作这些数据。当我们在`JTree`中添加了复选框(CheckBox),我们增强了它的功能,使用户可以对每个节点进行选择...

    JavaSwing中的JTree模型.pdf

    这个接口包含了获取父节点、子节点、子节点数量、索引等方法,以及判断节点是否为叶子节点和是否允许有子节点的方法。TreeNode 接口通常不直接实现,而是通过扩展它的子接口或类来使用,比如 DefaultMutableTreeNode...

    jtree带复选框的例子

    在这个例子中,关键的特性是,如果一个父节点的子节点中有一个或多个没有被选中,那么这个父节点及其所有上级父节点都不会被标记为选中状态。这是因为通常我们希望在这样的情况下,只有当所有的子节点都被选中时,父...

    JTree(节点带有checkbox)代码实例2

    在实际项目中,你可能还需要考虑更多的细节,例如处理子节点的复选状态同步、处理父节点的复选状态根据子节点状态自动更新等。在`isNodeSelected`方法中,你需要根据具体的数据模型来判断节点是否被选中。同时,你也...

    swing jtree

    7. **操作JTree**:JTree提供了多种方法来操作树,如expandRow()用于展开指定行,collapseRow()用于折叠行,getSelectionPath()获取当前选中的路径。 JTree的一些关键属性和方法包括: - **rootVisible**:控制...

    swing界面设计之JTree

    - **TreeNode接口**:定义了树节点的基本行为,如获取父节点、子节点等。 - **MutableTreeNode接口**:扩展了`TreeNode`接口,增加了修改节点的能力。 - **DefaultMutableTreeNode类**:实现了`MutableTreeNode`...

    Java带复选框的树(Java CheckBox Tree)实现和应用

    如果选中该结点使其父节点的所有子结点都被选中,则选中其父结点。如果某个结点被手动取消选中,那么它的所有子孙结点都应该被取消选中;如果该结点的父结点处于选中状态,则取消选中其父结点。 最后,在实现...

    java 实现动态改变树形结构中主节点的名称

    通过`DefaultMutableTreeNode`类创建节点,并将其添加到父节点中。 ```java DefaultMutableTreeNode root = new DefaultMutableTreeNode("Primary database"); DefaultMutableTreeNode node1 = new ...

    JTree 需要树的可以研究下

    它用于创建和显示树状结构,通常用于展示具有父节点和子节点的数据模型。`JTree`提供了丰富的功能,如展开/折叠节点、选择节点、添加/删除节点等。 2. **`DefaultTreeModel`和`TreeNode`** `JTree`的数据模型通常...

    java树形菜单

    - `TreeModel` 接口定义了树的数据结构,包括获取节点数量、获取父节点、获取子节点等方法。 - `DefaultTreeModel` 是一个基本的树模型实现,基于 `DefaultMutableTreeNode`。 4. **事件监听**: - `...

    java实现系统目录树控件

    使用java.io.File类获取系统的目录列表,并遍历目录,为每个目录和文件创建一个新的DefaultMutableTreeNode,然后将其添加到父节点。可以使用`listFiles()`方法来获取目录下的文件和子目录。 ```java File ...

    支持三态的树和复选框

    例如,如果你有一个树结构,其中父节点代表一组子节点,那么当子节点中有部分被选中时,父节点应显示为不确定状态。 JTree是Swing中用于展示层次数据的组件,它通常用于显示文件系统、数据库结构或其他具有层级关系...

    checknode(树型)

    3. **级联选择**:如果父节点被选中,其所有子节点也应该被选中;反之,如果父节点被取消选中,其所有子节点也应该被取消选中。 4. **事件监听**:当节点的状态改变时,可能需要触发一些动作,例如更新其他界面元素...

    Java目录树控件

    2. **递归添加子节点**:`addFilesAndDirsToTree`函数是一个递归函数,它会遍历指定目录下的所有文件和子目录,创建相应的`DefaultMutableTreeNode`并添加到父节点。 ```java private void addFilesAndDirsToTree...

    树形菜单结合多选框

    编写单元测试来验证不同场景下的正确性,包括父节点选中时子节点是否自动选中,子节点选中时父节点是否自动选中,以及多选框的正常操作。 通过以上步骤,我们可以在Java中实现一个具有多选功能的树形菜单,使得...

Global site tag (gtag.js) - Google Analytics