Swt Jface TreeViewer Selection

A2L文件解析与操作实战:MATLAB+Eclipse构建标定数据服务 A2L文件是汽车ECU标定中承载变量定义、内存地址、物理转换关系的核心元数据格式,其本质是ASAM MCD-2 MC标准下的结构化描述语言。理解其嵌套块语法(/begin /end)、跨块引用机制及COMPU_METHOD物理换算原理,是实现自动化解析的前提。技术价值在于将静态文本转化为可编程、可查询、可集成的动态数据源,支撑MAP提取、Excel报告生成、SPC分析及诊断工具链扩展。典型应用场景包括MATLAB批量反解AD原始值为物理量、Eclipse插件实现实时A2L浏览与验证、CI流程中自动校验合规性 阅读详情
在使用TreeViewer 构建一个文件浏览器时,有个需求是当在某种情况下selection是不需要选中的,当时立马想到的是
treeViewer.setSelection(null);

然而在设置之后发现并未起作用,

在实例化TreeViewer的时候默认Style为SWT.SINGLE,此时TreeViewer会默认选中第一项Node的,所以当你设置了为空后还是没有起作用。

如果我们想要打开这个文件浏览器面板时不选中,则可以在

treeViewer.addSelectionChangedListener(new ISelectionChangedListener(){
			public void selectionChanged(SelectionChangedEvent event) {
                           treeViewer.setSelection(StructuredSelection.EMPTY);	
			}
		});

当TreeViewer的Style为SWT.MULT时则不会出现默认选项

附测试代码:

import java.io.File;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.program.Program;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;


public class FileBrowserDialog extends Dialog{
	private Display display;
	private Shell shell;
	private Text fileNameText;
	private File file;
	private TreeViewer treeViewer;
	private ISelection selection;
	public Object result;
	private ImageRegistry imageRegistry; 
	private Image iconFolder = new Image(Display.getDefault(), "D:/素材/iphone.gif"); 
	private Image iconFile = new Image(Display.getDefault(), "D:/素材/android.gif");
	private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
	 
	public FileBrowserDialog(Shell parent, int style) {
		super(parent, style);
	}
	
	public Object open() {
		display = getParent().getDisplay();
		createContents();
		shell.open();
		shell.layout();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
		return result;
	}
	private void createContents() {
		shell = new Shell(getParent(), getStyle() | SWT.CLOSE | SWT.RESIZE |  SWT.APPLICATION_MODAL);
		shell.setSize(575, 496);
		GridLayout gl_shell = new GridLayout();
		gl_shell.numColumns = 2;
		shell.setLayout(gl_shell);
		
		Section sctnNewSection = formToolkit.createSection(shell,  Section.TITLE_BAR);
		sctnNewSection.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, false, 1, 1));
		formToolkit.paintBordersFor(sctnNewSection);
		sctnNewSection.setText("工作目录");

		treeViewer = new TreeViewer(shell, SWT.BORDER); 
		GridData gridData = new GridData(GridData.FILL_BOTH);
		gridData.widthHint = 408;
		gridData.heightHint = 219;
		treeViewer.getTree().setLayoutData(gridData); 
		
		treeViewer.setContentProvider(new ITreeContentProvider() { 
			public Object[] getChildren(Object parentElement) { 
				File[] files = ((File)parentElement).listFiles(); 
				if(files == null) 
					return new Object[0]; 
				return files; 
			}
			
			public Object getParent(Object element) { 
				return ((File)element).getParentFile(); 
			}
			
			public boolean hasChildren(Object element) { 
				File file = (File)element; 
				File[] files = file.listFiles(); 
				if(files == null || files.length == 0) 
					return false; 
				return true; 
			}
			
			public Object[] getElements(Object inputElement) { 
				File[] files = ((File)inputElement).listFiles(); 
				if(files == null) 
					return new Object[0]; 
				return files; 
			} 
			
			public void dispose() { 
			}
			
			public void inputChanged( 
					Viewer viewer, 
					Object oldInput, 
					Object newInput) { 
				//shell.setText("保存: " + newInput); 
			} 
		}); 

		treeViewer.setLabelProvider(new LabelProvider() { 
			public Image getImage(Object element) { 
				return getIcon((File)element); 
			} 
			public String getText(Object element) { 
				return ((File)element).getName(); 
			} 
		}); 
		
		treeViewer.setSorter(new ViewerSorter() { 
			public int category(Object element) { 
				File file = (File)element; 
				if(file.isDirectory()) 
					return 0; 
				else 
					return 1; 
			} 
		}); 
		
		treeViewer.setInput(new File("D:\\素材"));
		treeViewer.addFilter(new ViewerFilter() {
			public boolean select(Viewer viewer, Object parentElement, Object element) {
				File file = (File) element;
				if(file.getName().endsWith(".jpg") || file.isDirectory()) {
					return true;
				}
				return false;
			}
		});
		
		sctnNewSection.addListener(SWT.Activate, new Listener() {
			public void handleEvent(Event e) {
				treeViewer.collapseAll();
				treeViewer.setSelection(StructuredSelection.EMPTY);
				treeViewer.setSelection(null);
			}
		});
		
		//treeViewer.setSelection(StructuredSelection.EMPTY);
		//treeViewer.setSelection(null);
		//selection = new StructuredSelection(new File("D:\\素材\\图片\\1.jpg"));
		//treeViewer.setSelection(selection);
		treeViewer.addSelectionChangedListener(new ISelectionChangedListener(){
			public void selectionChanged(SelectionChangedEvent event) {
				selection = treeViewer.getSelection();
				if(file != null) {
					file = (File) ((StructuredSelection)selection).getFirstElement();
					if(file.isFile()) {
						fileNameText.setText(file.getName());
					}
				}
			}
		});
		new Label(shell, SWT.NONE);
	
		Composite composite = new Composite(shell, SWT.NONE);
		GridData gd_composite = new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1);
		gd_composite.widthHint = 438;
		composite.setLayoutData(gd_composite);
		composite.setBounds(200, 200, 200, 30);
		composite.setLayout(new GridLayout(9, false));
		new Label(composite, SWT.NONE);
		new Label(composite, SWT.NONE);
		Label label = new Label(composite, SWT.NONE);
		label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 3, 1));
		label.setText("文件名 :");
		
		fileNameText = new Text(composite, SWT.BORDER);
		
		GridData gd_text_1 = new GridData(SWT.FILL, SWT.CENTER, false, false, 3, 1);
		gd_text_1.widthHint = 255;
		fileNameText.setLayoutData(gd_text_1);
		
		Button btnNewButton = new Button(composite, SWT.NONE);
		btnNewButton.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
		btnNewButton.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				
			}
		});
		btnNewButton.setText("保存");
		new Label(composite, SWT.NONE);
		new Label(composite, SWT.NONE);
		
		Label label_1 = new Label(composite, SWT.NONE);
		label_1.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 3, 1));
		label_1.setText("文件类型 :");
		
		Combo combo = new Combo(composite, SWT.NONE);
		combo.setEnabled(false);
		combo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1));
		combo.setText("xxxxxxxxxx");
		
		Button btnNewButton_1 = new Button(composite, SWT.NONE);
		GridData gd_btnNewButton_1 = new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1);
		gd_btnNewButton_1.widthHint = 37;
		btnNewButton_1.setLayoutData(gd_btnNewButton_1);
		btnNewButton_1.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				file = null;
				shell.dispose();
			}
		});
		btnNewButton_1.setText("取消");
	}
	
	public static void main(String[] args) {
		FileBrowserDialog dialog = new FileBrowserDialog(new Shell(), SWT.None);
		dialog.open();	
	}
	
	private Image getIcon(File file) {
		if (file.isDirectory())
			return iconFolder;
		int lastDotPos = file.getName().indexOf('.');
		if (lastDotPos == -1)
			return iconFile;
		Image image = getIcon(file.getName().substring(lastDotPos + 1));
		return image == null ? iconFile : image;
	}

	private Image getIcon(String extension) {
		if (imageRegistry == null)
			imageRegistry = new ImageRegistry();
		Image image = imageRegistry.get(extension);
		if (image != null)
			return image;
		Program program = Program.findProgram(extension);
		ImageData imageData = (program == null ? null : program.getImageData());
		if (imageData != null) {
			image = new Image(shell.getDisplay(), imageData);
			imageRegistry.put(extension, image);
		} else {
			image = iconFile;
		}
		return image;
	}
}





Java JFace教程-14.JFace性能优化 JFace性能优化摘要 大数据集处理优化: 分页加载:实现PagedTableViewer分页控件,通过pageSize控制每页数据量,使用prev/next按钮导航 延迟加载:LazyLoadingTreeViewer仅在展开节点时加载子项,减少初始加载数据量 虚拟视图实现: 虚拟TableViewer:使用SWT.VIRTUAL样式,通过SetData事件动态填充数据,避免一次性渲染所有行 虚拟TreeViewer:结合虚拟样式和延迟加载,仅在需要时计算并缓存子节点数据 优化手段显著减少内存占用和UI响 阅读详情

相关推荐

SWT TreeViewer实例

SWT的一个实例 TreeViewer的小程序范例

SWT/Jface(4): TreeViewer渲染简单树对象

TreeViewer提供了将树节点及数据集与树组件有机联系起来的机制和方法, 它的使用与表查看器非常相似,需要通过设置input属性设置树节点集,也需要设置内容提供器()和标签提供器(input: 指定树的根节点。通过该根节点可以找到树的一级节点及其子节点。: 设置树的内容提供器。内容提供器一般需要实现参数是input属性值,该方法返回显示在树中的节点元素数组。一般是树的根元素,返回的是一级元素。返回给定父袁术的子元素数组。返回元素element的父元素。判断元素element。

882

PROFINET方案选型指南:瑞萨/西门子/开源p-net协议栈对比实测

本文基于瑞萨RZ/N2L硬件平台,对瑞萨官方认证协议栈、西门子ERTECH及开源p-net三种PROFINET方案进行了实测对比。重点分析了PROFINET-IRT实时性、CPU/内存资源消耗、开发集成复杂度及许可证成本等核心指标,为工业设备制造商提供了从性能到商业决策的全面选型指南。

weixin_29291185的博客 210

SWT/JFace下的TreeViewer的使用

转载:http://zhongkem.iteye.com/blog/699224 1.入门篇:参照http://www.cnblogs.com/huqingyu/archive/2008/04/10/1146209.html,写得很详细也很简单 2.英文入门篇:看http://www.eclipse.org/articles/Article-TreeViewer/TreeViewerAr...

Grace_1203的博客 2809

【k8s实战】 在离线项目混部 通过kubeflow(tf-operator)部署TensorFlow机器学习任务+prometheus/grafana监控资源使用全过程(最新 图文)

目录在离线混合部署概念最新版kubeflow部署TensorFlow部署二级目录三级目录 在离线混合部署概念 先举一个例子,众所周知的天猫双十一当天的流量非常之大,那么就需要成百上千台服务器构成一个超大集群来提供计算能力,但是双十一过去之后,集群资源就面临着浪费的局面。假设业务分为在线和离线两种模式:在线任务需要资源相对较少,但要求响应时间短;离线任务则不需要对任务进行迅速响应,但是计算量相对较大、占用资源多。那么我们应该怎么在K8S集群上完成这两种业务的部署、并且使得CPU利用率始终维持在一个比较高的水平

Eros1on的博客 1546

SGM5860x高精度ADC驱动开发与SPI接口实战指南

本文详细介绍了SGM5860x高精度ADC芯片的驱动开发与SPI接口配置实战。内容涵盖芯片特性、SPI通信设置、寄存器映射、驱动初始化、数据采集处理、校准优化及调试技巧,帮助开发者快速掌握国产24位ADC的应用,提升工业测量项目的精度与稳定性。

vvv99的博客 718

使用Eclipse RCP创建视图并实现视图间消息传递(二)

在上一文中,我们介绍了怎样创建一个EclipseRCP,并创建用户交互的视图,但是并没有提到如何实现视图的交互。在本文中,我们会介绍以两种不同的方式实现Eclipse RCPView之间的交互,并结合代码详细领略一下Eclipse是如何巧妙处理View之间交互的。首先介绍一下我们要达到的效果,如下图所示:可以看到,用户点击左边视图上的人员列表,该人员的详细信息会显示在右侧的

xcl119xcl的专栏 4784

高分系列卫星轨道、传感器参数等信息

遥感卫星数据简介-高分系列

中遥科 3309

Swt/Jface treeViewer的使用

参考https://blog.youkuaiyun.com/liyanchen78/article/details/8767098

cm9393的博客 866

Cadence 批量一次性修改title 页码标题

本文介绍如何在Cadence软件中对DSN文件进行标题栏的批量编辑操作,包括选择编辑对象、使用快捷键打开属性面板以及如何修改标题、页码等关键信息。

tianpu2320959696的博客 976

vue3 - 最新详细实现高德地图绘制动态热力图详细教程,在某区域或城市地图上做“热力图层“展示人流量、旅游人口密度、热量图、全国地区地理热力图,利用颜色的深浅表示密度或强度等场景(详细示例代码教程)

vue3,nuxt3,高德地图,热力图,绘制热力图层,人流量,vue3使用高德地图实现某个区域热力图,vue3高德地图api加载热力图及关闭,接收热力图数据并渲染热力图,关掉热力图,Vue使用高德API制作热力图,热力图加载不出来,电子围栏围住热力图,vue3中使用高德地图渲染热力图组件,高德地图使用热力图详细教程,报错,卡顿,出不来怎么办,无法关闭,怎么解决这个问题,出错,城市名称,城市某个街道,城区,省份,市区,县城,乡镇,村,各省份的热力图,交通流量,人口流量,密度,旅游出行,人口数量,颜色介绍,深浅

✅ 精选推荐文章 5205

SWT中treeView和tableTreeView的使用实例

涉及到的几个实体类: 基本节点接口: public interface ITreeNode { public String getName() ; public void setName(String name); public abstract List getChil...

chitun9294的博客 1074

swt jface tree treeviewer

关于JFace的TreeViewer的Selection tree.setSelection(tree.getItem(0))和viewer.setSelection(new StructuredSelection(new Object[] { tree.getItem(0).getData() }));之间是有区别的,前者不会触发viewer的selectionChanged事件,后者

xiguankong的专栏 1064

Qt —— 在Win11下“Qt for Android“开发环境,通过USB在真机(华为Meta60 PRO)上调试运行,并打包APK并在真实手机运行

Qt —— 在Win11下“Qt for Android“开发环境,打包APK并在真实手机运行

312

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java jface table_JAVA.SWT/JFace: JFace篇之MVC的表格、树和列表(1)

《Eclipse SWT/JFACE 核心应用》 清华大学出版社 19 MVC的表格、树和列表19.1 MVC概述MVC是模型-视图=控制器(Model-View-Controller)设计模式的简称。MVC模式将数据与视图分开,通过控制器来控制与数据交互。JFace中有关实现MVC模式的控件都在org.eclipse.jface.viewers包下。所有的MVC控件都继承自View类,该类是一个...

weixin_28895791的博客 475

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

TreeViewer使用小计

Jface.treeViewer使用小结 作为表格树 treeViewer 的使用和TableViewer的使用基本一样。如下: treeViewer = new TreeViewer(this, SWT.FULL_SELECTION | SWT.BORDER);         GridData gridData = new GridData(SWT.FILL, SWT.FILL, ...

Myblog 387

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

关于JFace的TreeViewer的Selection

tree.setSelection(tree.getItem(0))和viewer.setSelection(new StructuredSelection(new Object[] { tree.getItem(0).getData() }));之间是有区别的,前者不会触发viewer的selectionChanged事件,后者则会触发,这里还需要注意的是在构造StructuredSelecti...

疯狂的菠菜 369

java jface table_java – 防止将JFace TableColumn调整为0宽度

我正在使用JFace TableViewer和TableColumnLayout.如何设置列最小宽度,或者至少阻止它调整为0宽度?TableColumnLayout layout = new TableColumnLayout();parent.setLayout(layout);TableViewer viewer = new TableViewer(parent, SWT.FULL_SELEC...

weixin_32821477的博客 143

SWT TableViewer 添加Filter实现快速检索

在TreeViewer中有包含FilterTree实现快速检索功能,TableViewer并没有快速检索功能,那模仿快速检索的Filter实现快速检索。1、创建自定义Filter继承ViewerFilter类,类中添加判断条件,实现过滤的判断。/** * */ package com.atom.studio.bizeditor.utils; import org.eclipse.jface

空间 1662

jface tree column tiptext

[code="java"] /******************************************************************************* * Copyright (c) 2006, 2007 Tom Schindl and others. * All rights reserved. This program and the accom...

Jamling的专栏 162

tree file options

package jface.treeviewer; import java.io.File; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.ITr...

yianpuodiaotu的专栏 159

通过TreeColumn实现“表格树”TableTree

Eclipse 3.1里deprecate了TableTree这个控件,与之对应的jface的TableTreeViewer虽然没有deprecate,但使用它会得到很多警告。在TableTreeViewer的第一列里是不能显示图标的,因为这个位置被+/-符号占用了,而且TableTree是显示不出 Tree的层次的,也就是没有缩进。 SWT 3.1里的Tree控件新支持了列的显示,是...

diaozhuo4700的博客 251

Eclipse工作台:使用选取服务

Eclipse工作台:使用选取服务摘要Eclipse工作台提供的选取服务允许工作台窗口的各个部分有效整合。了解使用已有的选取机制可以给你的插件一个全新的设计,平滑的整合到工作台中并对将来的扩展提供开放的空间。序论对IDE和其它的应用程序而言,Eclipse工作台是一个强大的UI框架,它提供了许多高度综合和可扩展的用户接口。其中之一就是视图插件,它为特定的项目提供附件信息,在工作台窗

li_xj的专栏 2416

包含CheckBox的TreeView控件——父节点选中时其子节点不可选,子节点有项选中时其父节点不可选...

1、在.aspx中添加TreeView控件: <asp:TreeView ID="tvTemp" runat="server" ShowCheckBoxes="All" ShowLines="True"> </asp:TreeView> 2、给TreeView控件添加onclick事件: 方法一:在TreeView控件上添加onclick事件 ...

weixin_30384031的博客 285
上一篇: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException
下一篇: React基于fetch的表单提交
echo_oy
博客等级 码龄12年 6粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值