« 玩转SWT的StyledText« »让SWT具有XP风格 »
swt下制做可编辑的Tree控件
有时,我们需要以树型的格式显示数据,比如windows的资源管理器,又比如eclipse中的Navigator视图。为了实现这种需求,swt中也提供了树型结构控件 -- Tree 。使用方法非常简单,如下:

程序代码 程序代码
// 生成一棵树,并放在tabFolder控件中
this.tree = new Tree(this.tabFolder, SWT.BORDER);

// 往树中添加数据
for (int i = 0; i < 5; i++) {
    TreeItem item = new TreeItem(this.tree, SWT.NONE);
    item.setText("www.junesky.org" + i);
    item.setData("当前选择的是www.junesky.org" + i);
}


这样一查树就显示在控件中了。若要做成windows的资源管理器那样,单击树中的一个节点,将该节点中的详细信息显示在画面中的一个文本控件中又该如何处理呢?

程序代码 程序代码
// 添加单击事件(这里使用了SWT.MouseUp,也可以使用SWT.MouseDown)
this.tree.addListener(SWT.MouseUp, new Listener() {
    public void handleEvent(Event event) {
        Point point = new Point(event.x, event.y);
        TreeItem item = tree.getItem(point);

         text.setText(item.getData());
    }
});


这时文本框中就会显示"当前选择的是www.junesky.org1"的信息。

若要在右键单击时显示一菜单又该如何处理呢?

程序代码 程序代码
this.tree.addListener(SWT.MenuDetect, new Listener() {
    public void handleEvent(Event event) {
        Menu menu = new Menu(shell, SWT.POP_UP);;
        MenuItem addItem = new MenuItem(menu, SWT.PUSH);
        addItem.setText("新建...");
    }
});


接 下来情况又要发生变化,当单击这个“新建”菜单时,要在树控件中新生成一个可编辑的节点。其实,swt中的tree控件的节点根本就不能进行编辑。那么我 们该如何处理才能完成这个任务呢?这里我们要用到另外一个对象 -- TreeEditor。思路是,在单击“添加”菜单后,生成一Text对象,使用户看上去以为正在编辑的是tree的节点。为addItem添加单击事 件,并在该事件中新生成一个节点。

程序代码 程序代码
addItem.addListener(SWT.Selection, new Listener() {
    public void handleEvent(Event e) {
        TreeItem item = new TreeItem(tree, SWT.NONE);
        item.setText("这是新追加的节点");
        editor.setEditor(getEditorText(bookItem), bookItem);
    }
});

/**
* 在树控件上生成一个可编辑的文本框
*/
private Text createEditorText(final TreeItem item) {
    // 生成一文本框
    final Text text = new Text(tree, SWT.NONE);
    // 将生成的树节点中的文本设置到文本框中
    text.setText(item.getText());
    // 将文本全部高亮选中
    text.selectAll();
    // 将光标置入文本框
    text.setFocus();

    // 为文本框添加失去焦点事件
    text.addFocusListener(new FocusAdapter() {
        public void focusLost(FocusEvent event) {
            System.out.println("失去焦点");
            // 将文本设置入树节点中
            item.setText(text.getText());
            // 使文本框失效
            text.dispose();
        }
    });

    // 为文本框添加键盘事件
    text.addKeyListener(new KeyAdapter() {
        public void keyPressed(KeyEvent event) {
            switch (event.keyCode) {
                // 如果按下的是ESC键,将文本框中的文字清除
                case SWT.ESC : {
                    text.setText("");
                    break;
                }
                // 如果按下的是Enter键,将文本框中的文字置入树节点中
                case SWT.CR : {
                    item.setText(text.getText());
                    // 使文本框失效
                    text.dispose();
                }
            }
        }
    });
    return text;
}


至此,我们的可编辑树就制做完成了。

总结:swt为我们提供了很多内置的组件,有些组件的功能是需要与其它组件组合使用的,这些都是在我们的开发中需要慢慢体会的。  


Tags: SWT-Designer-研究学习  

原创文章如转载,请注明:转载自:飞扬部落编程仓库 : http://www.busfly.net/csdn/

本文链接地址:http://www.busfly.net/csdn/post/SWT-Designer-Tree.html

如果你喜欢本文,请顶一下,支持我,你的支持是我继续发好文章的最大动力。谢谢。
好东西需要分享,快把本文发给你的朋友吧~!~

     
相关文章:
玩转SWT的StyledText  (2007-10-30 23:39:46)
SWT的MessageBox对话框  (2007-10-30 23:39:3)
SWT中运用多线程编程  (2007-10-30 23:38:16)
Swt/JFace制做系统托盘程序  (2007-10-30 23:37:25)
SWT/JFACE开发出错一例  (2007-10-30 23:34:44)
SWT设计思路  (2007-10-30 23:33:12)
Swt常用控件中文教程  (2007-10-30 23:17:37)
SWT控件速查  (2007-10-30 23:17:37)
在Eclipse中使用SWT进行界面设计  (2007-10-29 18:20:52)
SWT中运用多线程编程  (2007-10-29 18:19:5)




◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
Feed订阅集
网站分类
勤劳致富^.^
最近发表
最新评论及回复
最近留言
随机推荐文章
Powered By Z-Blog   STYLE by busfly . FatMouse
Copyright © 2007 巴士飞扬技术博客. . 沪ICP备07027972号. 会员群1(VS为主):3769186.