您的位置:首页 > 其它

关于JTree的简单示例的补充,处理TreeSelectionEvent事件!

2009-03-26 19:24 393 查看
当我们在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();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: