`

swt tree 关联选择监听器

    博客分类:
  • swt
阅读更多

该监听需注册到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);
			}
		}
	}
	
分享到:
评论

相关推荐

    SWT内存泄露解决办法

    2. **及时解除监听器绑定**:当不再需要监听某个事件时,应移除对应的事件监听器,避免持有对控件的引用。 3. **避免全局变量和静态变量持有 SWT 对象**:全局和静态变量的生命周期很长,可能导致对象长时间保持在...

    SWT教程

    - **监听器(Listener)**:响应特定事件的接口,如SelectionListener、FocusListener等。 - **命令(Command)**:SWT提供了一种基于事件处理的机制,可以通过命令来触发特定行为。 6. **JFace与SWT的关系** - **...

    SWT 各种小示例集中

    7. **事件和事件处理**:SWT采用事件驱动模型,通过监听器接口(如ActionListener、MouseListener)处理用户的交互行为。 8. **JFace控件**:JFace在SWT基础上添加了如DataBinding、ViewPart、SashForm等高级组件,...

    swt源码以及jar

    除了基本的GUI组件,SWT还提供了许多高级功能,比如对话框(Dialogs)、表格(Table)、树形视图(Tree)、进度条(ProgressBar)、菜单(Menu)等。开发者可以根据需求组合使用这些组件,创建出复杂且功能强大的...

    SWT TreeViewer实例

    - 添加监听器来响应用户的操作,如选择节点、展开/折叠节点等。可以使用`treeViewer.addSelectionChangedListener`和`treeViewer.addDoubleClickListener`等方法。 8. **启动和运行** - 使用`shell.open()`启动...

    SWT/Jface API 3.4

    7. **Table and Tree Widgets**:SWT 提供了 Table 和 Tree 控件,允许用户显示和操作数据。在 JFace 中,TableViewer 和 TreeViewer 扩展了这些功能,添加了数据绑定和自定义列渲染等功能。 8. **Layout Managers*...

    org.eclipse.swt包

    - SWT使用监听器模型处理用户交互。例如,`SelectionListener`用于监听按钮点击事件,`KeyListener`和`MouseListener`分别用于处理键盘和鼠标事件。 - 通过实现特定的接口或继承抽象类,你可以定义自己的事件...

    Java SWT 图形用户界面教程 PDF

    开发者可以通过添加监听器(Listener)来响应这些事件,实现相应的业务逻辑。 5. **数据绑定**: SWT 支持数据绑定,可以将组件的值与模型对象的属性关联起来,方便数据的读取和更新。 6. ** SWT 与 Eclipse IDE*...

    eclipse swt/jface核心应用源码

    6. 事件处理(Event Handling):SWT和JFace使用监听器接口(Listeners)处理用户交互,如鼠标点击、键盘输入等。 7. 模型-视图-控制器(MVC):JFace的许多类都是为了支持MVC设计模式,如`ViewPart`和`EditorPart`...

    swt&jface api

    7. 事件和监听器:描述了如何注册事件监听器以响应用户交互,如点击按钮、选择列表项等。 8. 模型-视图-控制器(MVC):解释了MVC设计模式在JFace中的应用,以及如何划分代码结构以保持清晰的职责分离。 9. 工具栏...

    org.eclipse.swt.rar

    例如,Button、Text、Tree等基本组件的实现细节,以及布局管理器(如GridLayout、FormLayout)的工作原理,都可以通过源码深入理解。 在实际应用中,SWT的灵活性使得开发者能够创建高度定制的界面,包括自定义控件...

    SWT中利用Treeview来显示XML文件

    4. **监听事件**:添加事件监听器,比如`SelectionListener`,以便在用户点击树节点时执行相应的操作,如展开、折叠节点,或者加载该节点的子节点内容。 5. **数据绑定**:为了实现虚拟化,我们需要一个数据模型来...

    SWT/JFace官方实例

    SWT 和 JFace 都提供了事件模型,通过监听和处理事件,我们可以实现控件之间的交互和响应用户操作。 8. **国际化和本地化**:Eclipse 平台支持多语言环境,实例可能会展示如何实现界面的国际化,以便不同地区和语言...

    swt jface_API_CHM.zip

    5. **Events and Handlers**: SWT事件模型允许开发者注册监听器来处理用户交互,如鼠标点击、键盘输入等。 6. **Dialogs**: 内置的对话框类,如FileDialog、MessageDialog、InputDialog等,为常见的用户交互提供了...

    简单的文件资源管理器应用程序

    总结来说,创建一个简单的文件资源管理器应用程序涉及到SWT和JFace组件的使用,以及事件监听、数据绑定和用户交互的实现。通过这个项目,开发者可以深入理解GUI编程,提升在Java环境中构建桌面应用的能力。

    JFace一些资料

    Viewer提供了数据管理、排序、过滤等功能,并能与 SWT 控件如Table、Tree等无缝集成。 3. **Dialogs and Wizards**:JFace提供了一套标准的对话框和向导实现,如OpenDialog、SaveDialog等,简化了创建用户交互流程...

    11-JFace.rar_java jface

    在Eclipse中,SWT(Standard Widget Toolkit)提供了基本的UI组件,如按钮、文本框等,而JFace则是建立在SWT之上的抽象层。JFace提供了一些高级功能,例如数据绑定、表单构建、视图管理以及对话框服务,使得开发者...

    JAVA文件夹浏览器

    SWT提供了诸如树控件(Tree)和列表控件(List),可用于显示文件和目录结构。用户点击节点时,可通过事件监听器获取选中的路径,然后进行相应的操作。 4. **打开文件**:当用户选择一个文件后,应用需要有能力打开...

Global site tag (gtag.js) - Google Analytics