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;
}
}