您的位置:首页 > 其它

带复选框的TreeViewer用例,读取电脑各硬盘和文件。CheckboxTreeViewer

2013-05-10 13:38 417 查看
演示CheckboxTreeViewer


import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.util.ArrayList;

import java.util.List;

import org.eclipse.jface.viewers.CheckStateChangedEvent;

import org.eclipse.jface.viewers.CheckboxTreeViewer;

import org.eclipse.jface.viewers.ICheckStateListener;

import org.eclipse.jface.viewers.ILabelProvider;

import org.eclipse.jface.viewers.ILabelProviderListener;

import org.eclipse.jface.viewers.ITreeContentProvider;

import org.eclipse.jface.viewers.LabelProviderChangedEvent;

import org.eclipse.jface.viewers.TreeViewer;

import org.eclipse.jface.viewers.Viewer;

import org.eclipse.jface.window.ApplicationWindow;

import org.eclipse.swt.SWT;

import org.eclipse.swt.events.SelectionAdapter;

import org.eclipse.swt.events.SelectionEvent;

import org.eclipse.swt.graphics.Image;

import org.eclipse.swt.layout.GridData;

import org.eclipse.swt.layout.GridLayout;

import org.eclipse.swt.widgets.Button;

import org.eclipse.swt.widgets.Composite;

import org.eclipse.swt.widgets.Control;

import org.eclipse.swt.widgets.Display;

import org.eclipse.swt.widgets.Shell;

/**

* This class demonstrates the CheckboxTreeViewer

*/

public class CheckFileTree extends FileTree {

/**

* Configures the shell

*

* @param shell

* the shell

*/

protected void configureShell(Shell shell) {

super.configureShell(shell);

shell.setText("Check File Tree");

}

/**

* Creates the main window's contents

*

* @param parent

* the main window

* @return Control

*/

protected Control createContents(Composite parent) {

Composite composite = new Composite(parent, SWT.NONE);

composite.setLayout(new GridLayout(1, false));

// Add a checkbox to toggle whether the labels preserve case

Button preserveCase = new Button(composite, SWT.CHECK);

preserveCase.setText("&Preserve case");

// Create the tree viewer to display the file tree

final CheckboxTreeViewer tv = new CheckboxTreeViewer(composite);

tv.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));

tv.setContentProvider(new FileTreeContentProvider());

tv.setLabelProvider(new FileTreeLabelProvider());

tv.setInput("root"); // pass a non-null that will be ignored

// When user checks the checkbox, toggle the preserve case attribute

// of the label provider

preserveCase.addSelectionListener(new SelectionAdapter() {

public void widgetSelected(SelectionEvent event) {

boolean preserveCase = ((Button) event.widget).getSelection();

FileTreeLabelProvider ftlp = (FileTreeLabelProvider) tv

.getLabelProvider();

ftlp.setPreserveCase(preserveCase);

}

});

// When user checks a checkbox in the tree, check all its children

tv.addCheckStateListener(new ICheckStateListener() {

public void checkStateChanged(CheckStateChangedEvent event) {

// If the item is checked . . .

if (event.getChecked()) {

// . . . check all its children

tv.setSubtreeChecked(event.getElement(), true);

}

}

});

return composite;

}

/**

* The application entry point

*

* @param args

* the command line arguments

*/

public static void main(String[] args) {

new CheckFileTree().run();

}

}

/**

* This class demonstrates TreeViewer. It shows the drives, directories, and

* files on the system.

*/

class FileTree extends ApplicationWindow {

/**

* FileTree constructor

*/

public FileTree() {

super(null);

}

/**

* Runs the application

*/

public void run() {

// Don't return from open() until window closes

setBlockOnOpen(true);

// Open the main window

open();

// Dispose the display

Display.getCurrent().dispose();

}

/**

* Configures the shell

*

* @param shell

* the shell

*/

protected void configureShell(Shell shell) {

super.configureShell(shell);

// Set the title bar text and the size

shell.setText("File Tree");

shell.setSize(400, 400);

}

/**

* Creates the main window's contents

*

* @param parent

* the main window

* @return Control

*/

protected Control createContents(Composite parent) {

Composite composite = new Composite(parent, SWT.NONE);

composite.setLayout(new GridLayout(1, false));

// Add a checkbox to toggle whether the labels preserve case

Button preserveCase = new Button(composite, SWT.CHECK);

preserveCase.setText("&Preserve case");

// Create the tree viewer to display the file tree

final TreeViewer tv = new TreeViewer(composite);

tv.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));

tv.setContentProvider(new FileTreeContentProvider());

tv.setLabelProvider(new FileTreeLabelProvider());

tv.setInput("root"); // pass a non-null that will be ignored

// When user checks the checkbox, toggle the preserve case attribute

// of the label provider

preserveCase.addSelectionListener(new SelectionAdapter() {

public void widgetSelected(SelectionEvent event) {

boolean preserveCase = ((Button) event.widget).getSelection();

FileTreeLabelProvider ftlp = (FileTreeLabelProvider) tv

.getLabelProvider();

ftlp.setPreserveCase(preserveCase);

}

});

return composite;

}

}

/**

* This class provides the content for the tree in FileTree

*/

class FileTreeContentProvider implements ITreeContentProvider {

/**

* Gets the children of the specified object

*

* @param arg0

* the parent object

* @return Object[]

*/

public Object[] getChildren(Object arg0) {

// Return the files and subdirectories in this directory

return ((File) arg0).listFiles();

}

/**

* Gets the parent of the specified object

*

* @param arg0

* the object

* @return Object

*/

public Object getParent(Object arg0) {

// Return this file's parent file

return ((File) arg0).getParentFile();

}

/**

* Returns whether the passed object has children

*

* @param arg0

* the parent object

* @return boolean

*/

public boolean hasChildren(Object arg0) {

// Get the children

Object[] obj = getChildren(arg0);

// Return whether the parent has children

return obj == null ? false : obj.length > 0;

}

/**

* Gets the root element(s) of the tree

*

* @param arg0

* the input data

* @return Object[]

*/

public Object[] getElements(Object arg0) {

// These are the root elements of the tree

// We don't care what arg0 is, because we just want all

// the root nodes in the file system

return File.listRoots();

}

/**

* Disposes any created resources

*/

public void dispose() {

// Nothing to dispose

}

/**

* Called when the input changes

*

* @param arg0

* the viewer

* @param arg1

* the old input

* @param arg2

* the new input

*/

public void inputChanged(Viewer arg0, Object arg1, Object arg2) {

// Nothing to change

}

}

/**

* This class provides the labels for the file tree

*/

class FileTreeLabelProvider implements ILabelProvider {

// The listeners

private List listeners;

// Images for tree nodes

private Image file;

private Image dir;

// Label provider state: preserve case of file names/directories

boolean preserveCase;

/**

* Constructs a FileTreeLabelProvider

*/

public FileTreeLabelProvider() {

// Create the list to hold the listeners

listeners = new ArrayList();

// Create the images

try {

file = new Image(null, new FileInputStream("images/file.gif"));

dir = new Image(null, new FileInputStream("images/directory.gif"));

} catch (FileNotFoundException e) {

// Swallow it; we'll do without images

}

}

/**

* Sets the preserve case attribute

*

* @param preserveCase

* the preserve case attribute

*/

public void setPreserveCase(boolean preserveCase) {

this.preserveCase = preserveCase;

// Since this attribute affects how the labels are computed,

// notify all the listeners of the change.

LabelProviderChangedEvent event = new LabelProviderChangedEvent(this);

for (int i = 0, n = listeners.size(); i < n; i++) {

ILabelProviderListener ilpl = (ILabelProviderListener) listeners

.get(i);

ilpl.labelProviderChanged(event);

}

}

/**

* Gets the image to display for a node in the tree

*

* @param arg0

* the node

* @return Image

*/

public Image getImage(Object arg0) {

// If the node represents a directory, return the directory image.

// Otherwise, return the file image.

return ((File) arg0).isDirectory() ? dir : file;

}

/**

* Gets the text to display for a node in the tree

*

* @param arg0

* the node

* @return String

*/

public String getText(Object arg0) {

// Get the name of the file

String text = ((File) arg0).getName();

// If name is blank, get the path

if (text.length() == 0) {

text = ((File) arg0).getPath();

}

// Check the case settings before returning the text

return preserveCase ? text : text.toUpperCase();

}

/**

* Adds a listener to this label provider

*

* @param arg0

* the listener

*/

public void addListener(ILabelProviderListener arg0) {

listeners.add(arg0);

}

/**

* Called when this LabelProvider is being disposed

*/

public void dispose() {

// Dispose the images

if (dir != null)

dir.dispose();

if (file != null)

file.dispose();

}

/**

* Returns whether changes to the specified property on the specified

* element would affect the label for the element

*

* @param arg0

* the element

* @param arg1

* the property

* @return boolean

*/

public boolean isLabelProperty(Object arg0, String arg1) {

return false;

}

/**

* Removes the listener


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: