package cn.com.test;
imp
imp
imp
imp
imp
imp
imp
imp
public class MainApp {
protected Shell shell;
/**
* Launch the application.
* @param args
*/
public static void main(String[] args) {
try {
MainApp window = new MainApp();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Open the window.
*/
public void open() {
Display display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
/**
* Create contents of the window.
*/
protected void createContents() {
shell = new Shell();
shell.setSize(450, 300);
shell.setText("SWT Application");
{
Composite composite = new Composite(shell, SWT.NONE);
composite.setBounds(0, 0, 434, 262);
{
final Tree tree = new Tree(composite, SWT.BORDER | SWT.CHECK | SWT.FULL_SELECTION | SWT.VIRTUAL | SWT.MULTI);
tree.setBounds(0, 0, 189, 252);
final TreeItem treeItem = new TreeItem(tree, SWT.NONE);
//treeItem.setChecked(true);
treeItem.setText("\u5168\u90E8");
final TreeItem treeItem_2 = new TreeItem(tree, SWT.NONE);
treeItem_2.setChecked(false);
treeItem_2.setText("\u5168\u90E82");
final TreeItem treeItem1 = new TreeItem(treeItem, SWT.NONE);
treeItem1.setText("New TreeItem1");
treeItem1.setData("value", "你是我的玫瑰花");
final TreeItem treeItem2 = new TreeItem(treeItem, SWT.NONE);
treeItem2.setText("New TreeItem2");
final TreeItem treeItem3 = new TreeItem(treeItem, SWT.NONE);
treeItem3.setText("New TreeItem3");
final TreeItem treeItem4 = new TreeItem(treeItem, SWT.NONE);
treeItem4.setText("New TreeItem4");
treeItem.setExpanded(true);
final TreeItem treeItem2_1 = new TreeItem(treeItem_2, SWT.NONE);
treeItem2_1.setText("New TreeItem2-1");
final TreeItem treeItem2_2 = new TreeItem(treeItem_2, SWT.NONE);
treeItem2_2.setText("New TreeItem2-2");
final TreeItem treeItem2_3 = new TreeItem(treeItem_2, SWT.NONE);
treeItem2_3.setText("New TreeItem2-3");
final TreeItem treeItem2_4 = new TreeItem(treeItem_2, SWT.NONE);
treeItem2_4.setText("New TreeItem2-4");
treeItem_2.setExpanded(true);
final TreeItem treeItem1_2_1 = new TreeItem(treeItem2, SWT.NONE);
treeItem1_2_1.setText("New TreeItem2-1");
final TreeItem treeItem1_2_2 = new TreeItem(treeItem2, SWT.NONE);
treeItem1_2_2.setText("New TreeItem2-2");
final TreeItem treeItem1_2_3 = new TreeItem(treeItem2, SWT.NONE);
treeItem1_2_3.setText("New TreeItem2-3");
final TreeItem treeItem1_2_4 = new TreeItem(treeItem2, SWT.NONE);
treeItem1_2_4.setText("New TreeItem2-4");
treeItem2.setExpanded(true);
tree.addSelectionListener(new SelectionAdapter() {
//迭代选择上级目录的多选框
private void selectAllSubItems(TreeItem selectedTreeItem){
TreeItem[] selection = selectedTreeItem.getItems();
for (int i = 0; i < selection.length; i++) {
selection[i].setChecked(selectedTreeItem.getChecked());
selectAllSubItems(selection[i]);
}
}
private void selectAllParentItems(TreeItem selectedTreeItem){
TreeItem parentTreeItem = selectedTreeItem.getParentItem();
//当有一个未被选中的时候,取消父节点的选择,当全部选中,则父节点选中
if(parentTreeItem != null){
TreeItem[] parentSubItems = parentTreeItem.getItems();
boolean allChecked = true;
for (int i = 0; i < parentSubItems.length; i++) {
allChecked = parentSubItems[i].getChecked();
if(!allChecked){
break;
}
}
parentTreeItem.setChecked(allChecked);
selectAllParentItems(parentTreeItem);
}
}
@Override
public void widgetSelected(SelectionEvent e) {
if(e.detail == SWT.CHECK){
TreeItem selectedTreeItem = (TreeItem)e.item;
String value = (String)selectedTreeItem.getData("value");
System.out.println(value);
//如果有父节点,选择父节点
selectAllParentItems(selectedTreeItem);
//如果有子节点,全选子节点
selectAllSubItems(selectedTreeItem);
}else{
System.out.println("其他事件");
}
}
});
}
}
}
}