文档

Java™教程
隐藏目录
如何编写一个Tree-Will-Expand监听器
步骤:使用Swing创建GUI
课程:编写事件监听器
章节:为常用事件实现监听器

如何编写Tree-Will-Expand监听器

tree-will-expand监听器可以阻止树节点的展开或折叠。如果想在展开或折叠发生后收到通知,应该使用树展开监听器

 

此演示向在如何编写树展开监听器中讨论的TreeExpandEventDemo示例中添加了一个tree-will-expand监听器。此处添加的代码演示了tree-will-expand监听器可以阻止节点的展开和折叠:每次尝试展开节点时,监听器都会提示您进行确认。

TreeExpandEventDemo2.html

请尝试以下操作: 
  1. 点击“Launch”按钮以使用Java™ Web Start运行TreeExpandEventDemo2(下载JDK 7或更高版本)。或者,要自己编译和运行此示例,请参考示例索引启动TreeExpandEventDemo2示例
  2. 点击Potrero Hill节点左侧的图形。这会告诉树您要展开该节点。
    出现一个对话框询问您是否确实要展开该节点。
  3. 点击“展开”或关闭对话框。
    文本区域中的消息告诉您已经发生了tree-will-expand事件和tree-expanded事件。每条消息的末尾都是展开节点的路径。
  4. 尝试展开另一个节点,但这次按下对话框中的“取消展开”按钮。
    节点不会展开。文本区域中的消息告诉您已经发生了tree-will-expand事件,并且您取消了树的展开。
  5. 折叠Potrero Hill节点。
    节点会折叠而不会出现对话框,因为事件处理程序的treeWillCollapse方法允许折叠发生,无需竞争。

以下代码片段显示了此程序添加到TreeExpandEventDemo中的代码。加粗的那一行阻止了树的展开。您可以在TreeExpandEventDemo2.java中找到所有演示的源代码。

public class TreeExpandEventDemo2 ... {
    ...
    class DemoArea ... implements ... TreeWillExpandListener {
        ...
        public DemoArea() {
            ...
            tree.addTreeWillExpandListener(this);
            ...
        }
        ...
        //实现TreeWillExpandListener接口所必需的方法
        public void treeWillExpand(TreeExpansionEvent e) 
                    throws ExpandVetoException {
            saySomething("检测到树节点将展开的事件", e);
            //...显示一个对话框...
            if (/* 用户取消了展开 */) {
                //取消展开
                saySomething("取消树节点展开", e);
                throw new ExpandVetoException(e);
            }
        }

        //实现TreeWillExpandListener接口所必需的方法
        public void treeWillCollapse(TreeExpansionEvent e) {
            saySomething("检测到树节点将折叠的事件", e);
        }
        ...
    }
}

树节点展开监听器 API

TreeWillExpandListener 接口

TreeWillExpandListener 没有适配器类。

方法 用途
treeWillCollapse(TreeExpansionEvent) 在树节点折叠之前调用。为了阻止折叠的发生,你的方法实现应该抛出一个 ExpandVetoException 事件。
treeWillExpand(TreeExpansionEvent) 在树节点展开之前调用。为了阻止展开的发生,你的方法实现应该抛出一个 ExpandVetoException 事件。

有关前述方法的参数 TreeExpansionEvent 的信息,请参见 树节点展开事件 API

使用树节点展开监听器的示例

TreeExpandEventDemo2,在本节中展示的示例,是唯一一个使用树将要展开监听器的示例。


上一页: 如何编写树选择监听器
下一页: 如何编写可撤销编辑监听器