试验代码如下:
Display display = new Display();
Shell shell = new Shell(display);
Tree tree = new Tree(shell, SWT.BORDER);
TreeViewer treeViewer = new TreeViewer(tree);
// tree.addMouseListener(new MouseAdapter(){
// @Override
// public void mouseDoubleClick(MouseEvent e) {
// MessageDialog.openInformation(e.display.getActiveShell(), "DoubleClicked", ((Tree)e.getSource()).getSelection()[0].getText());
// }
// });
treeViewer.addTreeListener(new ITreeViewerListener(){
public void treeCollapsed(TreeExpansionEvent e) {
MessageDialog.openInformation(((TreeViewer)e.getSource()).getTree().getShell(), "TreeCollapsed", ((Category)e.getElement()).getName());
}
public void treeExpanded(TreeExpansionEvent e) {
MessageDialog.openInformation(((TreeViewer)e.getSource()).getTree().getShell(), "TreeExpanded", ((Category)e.getElement()).getName());
}
});
treeViewer.addDoubleClickListener(new IDoubleClickListener(){
public void doubleClick(DoubleClickEvent e) {
MessageDialog.openInformation(((TreeViewer)e.getSource()).getTree().getShell(), "DoubleClicked", ((TreeViewer)e.getSource()).getTree().getSelection()[0].getText());
//JOptionPane.showMessageDialog(null, ((TreeViewer)e.getSource()).getTree().getShell());
}
});
treeViewer.setContentProvider(new ITreeContentProvider() {
public Object[] getChildren(Object parentElement) {
Vector<Category> subcats = ((Category)parentElement).getSubCategories();
return subcats == null ? new Object[0] : subcats.toArray();
}
public Object getParent(Object element) {
return ((Category)element).getParent();
}
public boolean hasChildren(Object element) {
return ((Category)element).getSubCategories() != null;
}
public Object[] getElements(Object inputElement) {
if(inputElement != null && inputElement instanceof Vector) {
return ((Vector<?>)inputElement).toArray();
}
return new Object[0];
}
public void dispose() {
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
});
treeViewer.setLabelProvider(new LabelProvider() {
public String getText(Object element) {
return ((Category)element).getName();
}
});
Vector<Category> categories = new Vector<Category>();
Category category = new Category("Java libraries", null);
categories.add(category);
category = new Category("UI Toolkits", category);
new Category("AWT", category);
new Category("Swing", category);
new Category("SWT/JFace", category);
category = new Category("Java IDEs", null);
categories.add(category);
new Category("Eclipse", category);
new Category("JBuilder", category);
treeViewer.setInput(categories);
tree.setSize(300, 200);
shell.setSize(300, 200);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
static class Category {
private String name;
private Vector<Category> subCategories;
private Category parent;
public Category(String name, Category parent) {
this.name = name;
this.parent = parent;
if(parent != null)
parent.addSubCategory(this);
}
public Vector<Category> getSubCategories() {
return subCategories;
}
private void addSubCategory(Category subcategory) {
if(subCategories == null) subCategories = new Vector<Category>();
if(!subCategories.contains(subcategory)) subCategories.add(subcategory);
}
public String getName() {
return name;
}
public Category getParent() {
return parent;
}
}
}