该监听需注册到tree对象上
/**
* @author hKF76182 zero
*
*/
public static class TreeSelectListener implements SelectionListener{
@Override
public void widgetSelected(SelectionEvent e) {
if(!(e.item instanceof TreeItem)){
return;
}
TreeItem treeItem=(TreeItem) e.item;
downLookup(treeItem);
upLookup(treeItem);
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
// TODO Auto-generated method stub
}
private void downLookup(TreeItem treeItem){
boolean checked=treeItem.getChecked();
TreeItem[] children = treeItem.getItems();
for (TreeItem item : children) {
item.setChecked(checked);
downLookup(item);
}
}
private void upLookup(TreeItem treeItem) {
boolean checked = treeItem.getChecked();
TreeItem pitem = treeItem.getParentItem();
if (checked) {
if (pitem != null) {
TreeItem[] childrens = pitem.getItems();
pitem.setChecked(true);
for (TreeItem children : childrens) {
System.out.println(children.getText());
if(!children.getChecked()){
pitem.setChecked(false);
break;
}
}
upLookup(pitem);
}
} else {
if (pitem != null) {
upLookup(pitem);
pitem.setChecked(false);
}
}
}
}
/** 带有半选状态的监听
* @author hKF76182 zero
*
*/
public static class TreeSelectListener implements SelectionListener{
@Override
public void widgetSelected(SelectionEvent e) {
if(!(e.item instanceof TreeItem)){
return;
}
TreeItem treeItem=(TreeItem) e.item;
downLookup(treeItem);
upLookup(treeItem);
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
// TODO Auto-generated method stub
}
private void downLookup(TreeItem treeItem){
boolean checked=treeItem.getChecked();
TreeItem[] children = treeItem.getItems();
for (TreeItem item : children) {
item.setChecked(checked);
downLookup(item);
}
if(checked){
treeItem.setGrayed(false);
}
}
private void upLookup(TreeItem treeItem) {
TreeItem pitem = treeItem.getParentItem();
if (pitem != null) {
TreeItem[] childrens = pitem.getItems();
boolean hasChildrenChecked = false;
boolean hasChildrenNoChecked = false;
for (TreeItem children : childrens) {
if (children.getChecked()) {
hasChildrenChecked = true;
if (children.getGrayed()) {
hasChildrenNoChecked = true;
break;
}
} else {
hasChildrenNoChecked = true;
if(hasChildrenChecked){
break;
}
}
}
pitem.setChecked(hasChildrenChecked);
pitem.setGrayed(hasChildrenNoChecked);
upLookup(pitem);
}
}
}
分享到:
相关推荐
2. **及时解除监听器绑定**:当不再需要监听某个事件时,应移除对应的事件监听器,避免持有对控件的引用。 3. **避免全局变量和静态变量持有 SWT 对象**:全局和静态变量的生命周期很长,可能导致对象长时间保持在...
- **监听器(Listener)**:响应特定事件的接口,如SelectionListener、FocusListener等。 - **命令(Command)**:SWT提供了一种基于事件处理的机制,可以通过命令来触发特定行为。 6. **JFace与SWT的关系** - **...
7. **事件和事件处理**:SWT采用事件驱动模型,通过监听器接口(如ActionListener、MouseListener)处理用户的交互行为。 8. **JFace控件**:JFace在SWT基础上添加了如DataBinding、ViewPart、SashForm等高级组件,...
除了基本的GUI组件,SWT还提供了许多高级功能,比如对话框(Dialogs)、表格(Table)、树形视图(Tree)、进度条(ProgressBar)、菜单(Menu)等。开发者可以根据需求组合使用这些组件,创建出复杂且功能强大的...
- 添加监听器来响应用户的操作,如选择节点、展开/折叠节点等。可以使用`treeViewer.addSelectionChangedListener`和`treeViewer.addDoubleClickListener`等方法。 8. **启动和运行** - 使用`shell.open()`启动...
7. **Table and Tree Widgets**:SWT 提供了 Table 和 Tree 控件,允许用户显示和操作数据。在 JFace 中,TableViewer 和 TreeViewer 扩展了这些功能,添加了数据绑定和自定义列渲染等功能。 8. **Layout Managers*...
- SWT使用监听器模型处理用户交互。例如,`SelectionListener`用于监听按钮点击事件,`KeyListener`和`MouseListener`分别用于处理键盘和鼠标事件。 - 通过实现特定的接口或继承抽象类,你可以定义自己的事件...
开发者可以通过添加监听器(Listener)来响应这些事件,实现相应的业务逻辑。 5. **数据绑定**: SWT 支持数据绑定,可以将组件的值与模型对象的属性关联起来,方便数据的读取和更新。 6. ** SWT 与 Eclipse IDE*...
6. 事件处理(Event Handling):SWT和JFace使用监听器接口(Listeners)处理用户交互,如鼠标点击、键盘输入等。 7. 模型-视图-控制器(MVC):JFace的许多类都是为了支持MVC设计模式,如`ViewPart`和`EditorPart`...
7. 事件和监听器:描述了如何注册事件监听器以响应用户交互,如点击按钮、选择列表项等。 8. 模型-视图-控制器(MVC):解释了MVC设计模式在JFace中的应用,以及如何划分代码结构以保持清晰的职责分离。 9. 工具栏...
例如,Button、Text、Tree等基本组件的实现细节,以及布局管理器(如GridLayout、FormLayout)的工作原理,都可以通过源码深入理解。 在实际应用中,SWT的灵活性使得开发者能够创建高度定制的界面,包括自定义控件...
4. **监听事件**:添加事件监听器,比如`SelectionListener`,以便在用户点击树节点时执行相应的操作,如展开、折叠节点,或者加载该节点的子节点内容。 5. **数据绑定**:为了实现虚拟化,我们需要一个数据模型来...
SWT 和 JFace 都提供了事件模型,通过监听和处理事件,我们可以实现控件之间的交互和响应用户操作。 8. **国际化和本地化**:Eclipse 平台支持多语言环境,实例可能会展示如何实现界面的国际化,以便不同地区和语言...
5. **Events and Handlers**: SWT事件模型允许开发者注册监听器来处理用户交互,如鼠标点击、键盘输入等。 6. **Dialogs**: 内置的对话框类,如FileDialog、MessageDialog、InputDialog等,为常见的用户交互提供了...
总结来说,创建一个简单的文件资源管理器应用程序涉及到SWT和JFace组件的使用,以及事件监听、数据绑定和用户交互的实现。通过这个项目,开发者可以深入理解GUI编程,提升在Java环境中构建桌面应用的能力。
Viewer提供了数据管理、排序、过滤等功能,并能与 SWT 控件如Table、Tree等无缝集成。 3. **Dialogs and Wizards**:JFace提供了一套标准的对话框和向导实现,如OpenDialog、SaveDialog等,简化了创建用户交互流程...
在Eclipse中,SWT(Standard Widget Toolkit)提供了基本的UI组件,如按钮、文本框等,而JFace则是建立在SWT之上的抽象层。JFace提供了一些高级功能,例如数据绑定、表单构建、视图管理以及对话框服务,使得开发者...
SWT提供了诸如树控件(Tree)和列表控件(List),可用于显示文件和目录结构。用户点击节点时,可通过事件监听器获取选中的路径,然后进行相应的操作。 4. **打开文件**:当用户选择一个文件后,应用需要有能力打开...