来自http://hi.baidu.com/lwpxhy/blog/item/3dc34860729595dc8cb10d57.html
当我们在JTree上点选任何一个节点,都会触发TreeSelectionEvent事件,如果我们要处理这样的事件,必须实作
TreeSelectionListener界面,此界面只定义了一个方法,那就是valueChanged()方法。
TreeSelectionEvent最常用在处理显示节点的内容,例如你在文件图标中点两下就可以看到文件的内容。在JTree中选择节点
的方式共有3种,这3种情况跟选择JList上的项目是一模一样的,分别是:
DISCONTIGUOUS_TREE_SELECTION:可作单一选择,连续点选择(按住[Shift]键),不连续选择多个节点(按住[Ctrl]键),
这是java默认值.
CONTINUOUS_TREE_SELECTION:按住[Shift]键,可对某一连续的节点区间作选取。
SINGLE_TREE_SELECTION:一次只能选一个节点。
你可以自行实作TreeSelectionModel制作作更复杂的选择方式,但通常是没有必要的,因为java提供了默认的选择模式类供我们
使用,那就是DefaultTreeSelectionModel,利用这个类我们可以很方便的设置上面3种选择模式。
下面这个范例,当用户点选了一个文件名时,就会将文件的内容显示出来。
TreeDemo7.java
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import com.incors.plaf.alloy.*;
import com.incors.plaf.alloy.themes.glass.*;
public class TreeDemo7 implements TreeSelectionListener
{
JEditorPane editorPane;
public TreeDemo7()
{
JFrame f = new JFrame("TreeDemo");
Container contentPane = f.getContentPane();
DefaultMutableTreeNode root = new DefaultMutableTreeNode("资源管理器");
DefaultMutableTreeNode node = new DefaultMutableTreeNode("TreeDemo1.java");
root.add(node);
node = new DefaultMutableTreeNode("TreeDemo2.java");
root.add(node);
node = new DefaultMutableTreeNode("TreeDemo3.java");
root.add(node);
node = new DefaultMutableTreeNode("TreeDemo4.java");
root.add(node);
JTree tree = new JTree(root);
//设置Tree的选择模式为一次只能选择一个节点
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
//检查是否有TreeSelectionEvent事件。
tree.addTreeSelectionListener(this);
//下面五行,JSplitPane中,左边是放含有JTree的JScrollPane,右边是放JEditorPane.
JScrollPane scrollPane1 = new JScrollPane(tree);
editorPane = new JEditorPane();
JScrollPane scrollPane2 = new JScrollPane(editorPane);
JSplitPane splitPane = new JSplitPane(
JSplitPane.HORIZONTAL_SPLIT,true, scrollPane1, scrollPane2);
contentPane.add(splitPane);
f.pack();
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
//本方法实作valueChanged()方法
public void valueChanged(TreeSelectionEvent e)
{
JTree tree = (JTree) e.getSource();
//利用JTree的getLastSelectedPathComponent()方法取得目前选取的节点.
DefaultMutableTreeNode selectionNode =
(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
String nodeName = selectionNode.toString();
//判断是否为树叶节点,若是则显示文件内容,若不是则不做任何事。
if (selectionNode.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") +
nodeName;
try {
//利用JEditorPane的setPage()方法将文件内容显示在editorPane中。若文件路径错误,则会产生IOException.
editorPane.setPage(filepath);
} catch(IOException ex) {
System.out.println("找不到此文件");
}
}
}
public static void main(String[] args) {
SwingUtil.setLookAndFeel();
new TreeDemo7();
}
}
class SwingUtil{
public static final void setLookAndFeel() {
try{
Font font = new Font("JFrame", Font.PLAIN, 12);
Enumeration keys = UIManager.getLookAndFeelDefaults().keys();
while (keys.hasMoreElements()) {
Object key = keys.nextElement();
if (UIManager.get(key) instanceof Font) {
UIManager.put(key, font);
}
}
AlloyLookAndFeel.setProperty("alloy.isLookAndFeelFrameDecoration", "true");
AlloyTheme theme = new GlassTheme();
LookAndFeel alloyLnF = new AlloyLookAndFeel(theme);
JFrame.setDefaultLookAndFeelDecorated(true);
UIManager.setLookAndFeel(alloyLnF);
}catch(UnsupportedLookAndFeelException ex){
ex.printStackTrace();
}
}
}
分享到:
相关推荐
JFrame frame = new JFrame("JTree示例"); frame.getContentPane().add(new JScrollPane(jTree)); frame.pack(); frame.setVisible(true); ``` ### 监听事件 `JTree`提供了多种事件监听器,如`...
为了响应用户的交互,比如点击或展开/折叠节点,我们可以为JTree添加事件监听器,如TreeSelectionListener和TreeWillExpandListener: ```java jTree.addTreeSelectionListener(new TreeSelectionListener() { ...
本教程将深入讲解JTree的使用方法,包括创建、配置、事件处理以及自定义节点图标等方面,同时提供相关的源码示例。 1. **创建JTree** 创建JTree的基本步骤是创建一个TreeNode对象或TreeModel,然后将其传递给JTree...
此外,你可能还需要监听`JTree`的事件,例如`TreeSelectionEvent`,以便在用户更改选择时进行相应的处理。你可以通过添加`TreeSelectionListener`来实现这一点。 ```java tree.addTreeSelectionListener(new ...
- **事件**:用户与`JTree`交互时,会触发各种事件,如`TreeSelectionEvent`,可以通过监听这些事件来响应用户操作。 2. **JTree2.0特性** - 可能的新特性:由于没有具体说明`JTree2.0`的具体变化,我们可以推测...
在这个“java-tree1.rar_jtree_tree java”主题中,我们将深入探讨两个主要的事件类型及其处理方式:`TreeModelEvent` 和 `TreeSelectionEvent`。 首先,`TreeModelEvent` 是当`JTree`的数据模型发生变化时触发的...
在本示例中,我们将深入探讨如何实现`JTree`与复选框结合的代码实例。 首先,我们需要创建一个自定义的`TreeCellRenderer`来渲染带有复选框的树节点。`DefaultTreeCellRenderer`是Swing默认的渲染器,我们可以继承...
在给定的代码示例"app_login.java"中,我们可以看到如何创建并使用JTree来展示登录界面的某种层次结构。 1. **创建JTree** 创建JTree的基本步骤包括创建DefaultMutableTreeNode对象,将其作为模型,然后将模型设置...
在Java Swing库中,`JTree`是一个组件,用于显示层次结构的数据,而`JCheckBox`则是一个可以勾选或取消勾选的图形用户界面元素。将`JCheckBox`与`JTree`结合使用,可以在树形结构的节点上提供复选框功能,允许用户...
JFrame frame = new JFrame("JTree 示例"); frame.getContentPane().add(new JScrollPane(jTree)); frame.pack(); frame.setVisible(true); ``` 至于`JTreeDemo1.java`这个文件,它很可能包含了上述步骤的实现代码...
在Java编程环境中,开发人员有时会遇到需要创建类似C#中的...通过研究这些代码,你可以学习到更多关于JTree的高级用法,以及如何将它整合到实际的Java应用中。记得运行代码并进行调试,以加深对TreeView组件的理解。
JTree提供了丰富的功能,包括节点的增删改查、选择和扩展状态的管理,以及自定义渲染和监听事件等。下面我们将详细介绍如何使用JTree来创建树菜单。 首先,我们需要创建一个DefaultMutableTreeNode对象,它是JTree...
在IT领域,树形菜单是一种常见的用户界面...不过,这只是一个基础的实现,实际应用中可能还需要处理更复杂的逻辑,例如加载异步数据、支持拖放操作等。在实践中,不断学习和优化,才能更好地掌握树形菜单的实现技巧。
根据给定文件的信息,我们可以提炼出以下几个主要的知识点: ...因此,在实际项目中,开发者需要根据具体的本体结构来进行树状结构的构建,并且可能还需要实现更复杂的事件处理逻辑来支持用户交互。
总的来说,创建Java目录树控件涉及到对文件系统结构的理解,使用`JTree`、`DefaultMutableTreeNode`和`DefaultTreeModel`等组件,以及处理用户交互的事件监听。熟练掌握这些知识点对于开发功能丰富的Java图形用户...
5.6 关于args[] 73 5.7 小结 74 第二篇 基础篇 第6章 对象和类——Java世界的细胞 77 6.1 面向对象概述 77 6.1.1 面向对象程序设计思想的诞生 77 6.1.2 面向过程与面向对象思想的对比 78 6.1.3 面向...