Swt Jface TreeViewer Selection

在使用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;
	}
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值