SWT如何控制TreeItem的展开

paodan 2009-12-01 11:15:11
我想在用户单击展开TreeItem的某个节点时,弹出一个对话框,进行一些权限验证,如果通过了,就展开当前节点,如果没通过,则不展开当前节点。试了treeExpanded,但是这个达不到效果,一点击展开就直接展开了,没有验证。
...全文
577 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
paodan 2009-12-23
  • 打赏
  • 举报
回复
结贴
paodan 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 pasband 的回复:]
class AuthTreeItem extends TreeItem {
public AuthTreeItem(Tree tree, int i) {
super(tree, i);
}

public void setExpanded(boolean exp) {
MessageBox box = new MessageBox(Display.getDefault()
.getActiveShell());
if (box.open() == SWT.OK) {
super.setExpanded(exp);
}
}
}
[/Quote]需要继承来覆盖setExpanded吗?有没有直接设置的?
pasband 2009-12-08
  • 打赏
  • 举报
回复
class AuthTreeItem extends TreeItem {
public AuthTreeItem(Tree tree, int i) {
super(tree, i);
}

public void setExpanded(boolean exp) {
MessageBox box = new MessageBox(Display.getDefault()
.getActiveShell());
if (box.open() == SWT.OK) {
super.setExpanded(exp);
}
}
}
wudeaaa 2009-12-07
  • 打赏
  • 举报
回复
帮顶
paodan 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 feifeikub 的回复:]
tree.addTreeListener(new TreeListener() {

@Override
public void treeCollapsed(TreeEvent e) {

}

@Override
public void treeExpanded(TreeEvent e) {
if (targetitem == e.item) {
MessageBox box = new MessageBox(Display.getDefault()
.getActiveShell());
box.open();
}
}
});
[/Quote]楼上有发过了,这样不行
encky 2009-12-01
  • 打赏
  • 举报
回复
为什么不在弹出对话框输入权限后,再根据权限来重新加载树呢?
一开始全部都只加载根节点,以后再慢慢加。。。
  • 打赏
  • 举报
回复
或者,如果有权限则加载节点,如果没有权限就加一个节点,上面显示内容是:权限不够
提示用户权限不够,不能看这里的内容
  • 打赏
  • 举报
回复
是这个意思,应该在加载阶段就判断权限
1、从效率上考虑,如果没有这个权限,当然不需要加载,减少开销
2、从安全上考虑,如果不管有没有权限都加载,而仅仅是通过权限控制他展不展开,那么也许可以通过分析内存中的内容得到敏感数据

paodan 2009-12-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pasband 的回复:]
tree.addTreeListener(new TreeListener() {

@Override
public void treeCollapsed(TreeEvent e) {

}

@Override
public void treeExpanded(TreeEvent e) {
if (targetitem == e.item) {
MessageBox box = new MessageBox(Display.getDefault()
.getActiveShell());
box.open();
}
}
});
[/Quote]这个你关闭了MessageBox后还是会展开的,只是在展开前弹出个对话框而已,这样即使验证不通过也是会展开的
pasband 2009-12-01
  • 打赏
  • 举报
回复
tree.addTreeListener(new TreeListener() {

@Override
public void treeCollapsed(TreeEvent e) {

}

@Override
public void treeExpanded(TreeEvent e) {
if (targetitem == e.item) {
MessageBox box = new MessageBox(Display.getDefault()
.getActiveShell());
box.open();
}
}
});
paodan 2009-12-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zrzlj 的回复:]
可以换个角度考虑这个问题啊,应该在加载节点的时候就控制全新啊,如果有权限就加载这些节点,如果没有权限就不加载,这样没有权限的人即使展开也看不到东西。

这样做不是更简单也更安全吗?
[/Quote]哦,知道1楼的意思了,假如没有权限,展开为空白的,并提示信息,有权限了才加载,是这个意思吗?
paodan 2009-12-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zrzlj 的回复:]
可以换个角度考虑这个问题啊,应该在加载节点的时候就控制全新啊,如果有权限就加载这些节点,如果没有权限就不加载,这样没有权限的人即使展开也看不到东西。

这样做不是更简单也更安全吗?
[/Quote]也有道理,但是这里是权限需要弹出对话框来验证才知道的,比如这棵树当前是收缩的,我点击展开符号“+”的时候会弹出验证对话框,如果没有弹出对话框无法输入权限信息。
  • 打赏
  • 举报
回复
可以换个角度考虑这个问题啊,应该在加载节点的时候就控制全新啊,如果有权限就加载这些节点,如果没有权限就不加载,这样没有权限的人即使展开也看不到东西。

这样做不是更简单也更安全吗?
feifeikub 2009-12-01
  • 打赏
  • 举报
回复
tree.addTreeListener(new TreeListener() {

@Override
public void treeCollapsed(TreeEvent e) {

}

@Override
public void treeExpanded(TreeEvent e) {
if (targetitem == e.item) {
MessageBox box = new MessageBox(Display.getDefault()
.getActiveShell());
box.open();
}
}
});

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧