Java Tutorial/SWT/Tree Event

Материал из Java эксперт
Перейти к: навигация, поиск

Get TreeItem from Mouse position in mouse down event

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
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.Tree;
import org.eclipse.swt.widgets.TreeItem;
public class TreeItemMousePostion {
  public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    final Tree tree = new Tree(shell, SWT.BORDER | SWT.MULTI);
    for (int i = 0; i < 12; i++) {
      TreeItem treeItem = new TreeItem(tree, SWT.NONE);
      treeItem.setText("Item " + i);
    }
    tree.addListener(SWT.MouseDown, new Listener() {
      public void handleEvent(Event event) {
        Point point = new Point(event.x, event.y);
        TreeItem item = tree.getItem(point);
        if (item != null) {
          System.out.println("Mouse down: " + item);
        }
      }
    });
    tree.setSize(200, 200);
    shell.setSize(300, 300);
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    display.dispose();
  }
}





Limit selection to items that match a pattern

/*******************************************************************************
 * Copyright (c) 2000, 2004 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
//package org.eclipse.swt.snippets;
/*
 * Tree example snippet: limit selection to items that match a pattern
 * 
 * For a list of all SWT example snippets see
 * http://www.eclipse.org/swt/snippets/
 */
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
public class TreeSelectionPattern {
  public static void main(String[] args) {
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());
    final Tree tree = new Tree(shell, SWT.BORDER | SWT.MULTI);
    for (int i = 0; i < 2; i++) {
      TreeItem item = new TreeItem(tree, SWT.NONE);
      item.setText("item " + i);
      for (int j = 0; j < 2; j++) {
        TreeItem subItem = new TreeItem(item, SWT.NONE);
        subItem.setText("item " + j);
        for (int k = 0; k < 2; k++) {
          TreeItem subsubItem = new TreeItem(subItem, SWT.NONE);
          subsubItem.setText("item " + k);
        }
      }
    }
    tree.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        TreeItem[] selection = tree.getSelection();
        TreeItem[] revisedSelection = new TreeItem[0];
        for (int i = 0; i < selection.length; i++) {
          String text = selection[i].getText();
          if (text.indexOf("1") > 0) {
            TreeItem[] newSelection = new TreeItem[revisedSelection.length + 1];
            System.arraycopy(revisedSelection, 0, newSelection, 0, revisedSelection.length);
            newSelection[revisedSelection.length] = selection[i];
            revisedSelection = newSelection;
          }
        }
        tree.setSelection(revisedSelection);
      }
    });
    shell.setSize(300, 300);
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    display.dispose();
  }
}





Tree default selection listener

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
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.Tree;
import org.eclipse.swt.widgets.TreeItem;
public class TreeNodeDefaultSelectionListener {
  public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());
    final Tree tree = new Tree(shell, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
    for (int i = 0; i < 4; i++) {
      TreeItem item0 = new TreeItem(tree, 0);
      item0.setText("Item " + i);
      for (int j = 0; j < 4; j++) {
        TreeItem item1 = new TreeItem(item0, 0);
        item1.setText("SubItem " + i + " " + j);
        for (int k = 0; k < 4; k++) {
          TreeItem item2 = new TreeItem(item1, 0);
          item2.setText("SubItem " + i + " " + j + " " + k);
        }
      }
    }
    tree.addListener(SWT.DefaultSelection, new Listener() {
      public void handleEvent(Event e) {
        String string = "";
        TreeItem[] selection = tree.getSelection();
        for (int i = 0; i < selection.length; i++)
          string += selection[i] + " ";
        System.out.println("DefaultSelection={" + string + "}");
      }
    });
    tree.getItems()[0].setExpanded(true);
    shell.pack();
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    display.dispose();
  }
}





Tree event: Measure TreeItem, Paint TreeItem and Erase TreeItem

/*******************************************************************************
 * Copyright (c) 2000, 2006 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
//package org.eclipse.swt.snippets;
/* 
 * Tree example snippet: Images on the right side of the TreeItem
 *
 * For a list of all SWT example snippets see
 * http://www.eclipse.org/swt/snippets/
 * 
 * @since 3.2
 */
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
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.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.swt.widgets.TreeItem;
public class TreeEventMeasurePaintErase {
  public static void main(String[] args) {
    Display display = new Display();
    final Image image = display.getSystemImage(SWT.ICON_INFORMATION);
    Shell shell = new Shell(display);
    shell.setText("Images on the right side of the TreeItem");
    shell.setLayout(new FillLayout());
    Tree tree = new Tree(shell, SWT.MULTI | SWT.FULL_SELECTION);
    tree.setHeaderVisible(true);
    tree.setLinesVisible(true);
    int columnCount = 4;
    for (int i = 0; i < columnCount; i++) {
      TreeColumn column = new TreeColumn(tree, SWT.NONE);
      column.setText("Column " + i);
    }
    int itemCount = 3;
    for (int i = 0; i < itemCount; i++) {
      TreeItem item1 = new TreeItem(tree, SWT.NONE);
      item1.setText("item " + i);
      for (int c = 1; c < columnCount; c++) {
        item1.setText(c, "item [" + i + "-" + c + "]");
      }
      for (int j = 0; j < itemCount; j++) {
        TreeItem item2 = new TreeItem(item1, SWT.NONE);
        item2.setText("item [" + i + " " + j + "]");
        for (int c = 1; c < columnCount; c++) {
          item2.setText(c, "item [" + i + " " + j + "-" + c + "]");
        }
        for (int k = 0; k < itemCount; k++) {
          TreeItem item3 = new TreeItem(item2, SWT.NONE);
          item3.setText("item [" + i + " " + j + " " + k + "]");
          for (int c = 1; c < columnCount; c++) {
            item3.setText(c, "item [" + i + " " + j + " " + k + "-" + c + "]");
          }
        }
      }
    }
    /*
     * NOTE: MeasureItem, PaintItem and EraseItem are called repeatedly.
     * Therefore, it is critical for performance that these methods be as
     * efficient as possible.
     */
    Listener paintListener = new Listener() {
      public void handleEvent(Event event) {
        switch (event.type) {
        case SWT.MeasureItem: {
          Rectangle rect = image.getBounds();
          event.width += rect.width;
          event.height = Math.max(event.height, rect.height + 2);
          break;
        }
        case SWT.PaintItem: {
          int x = event.x + event.width;
          Rectangle rect = image.getBounds();
          int offset = Math.max(0, (event.height - rect.height) / 2);
          event.gc.drawImage(image, x, event.y + offset);
          break;
        }
        }
      }
    };
    tree.addListener(SWT.MeasureItem, paintListener);
    tree.addListener(SWT.PaintItem, paintListener);
    for (int i = 0; i < columnCount; i++) {
      tree.getColumn(i).pack();
    }
    shell.setSize(500, 200);
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    if (image != null)
      image.dispose();
    display.dispose();
  }
}





Tree Exapand listener

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
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.Tree;
import org.eclipse.swt.widgets.TreeItem;
public class TreeExpandListener {
  public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());
    final Tree tree = new Tree(shell, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
    for (int i = 0; i < 4; i++) {
      TreeItem item0 = new TreeItem(tree, 0);
      item0.setText("Item " + i);
      for (int j = 0; j < 4; j++) {
        TreeItem item1 = new TreeItem(item0, 0);
        item1.setText("SubItem " + i + " " + j);
        for (int k = 0; k < 4; k++) {
          TreeItem item2 = new TreeItem(item1, 0);
          item2.setText("SubItem " + i + " " + j + " " + k);
        }
      }
    }
    tree.addListener(SWT.Expand, new Listener() {
      public void handleEvent(Event e) {
        System.out.println("Expand={" + e.item + "}");
      }
    });

    tree.getItems()[0].setExpanded(true);
    shell.pack();
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    display.dispose();
  }
}





Tree node Collapse listener

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
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.Tree;
import org.eclipse.swt.widgets.TreeItem;
public class TreeNodeCollapseListener {
  public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());
    final Tree tree = new Tree(shell, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
    for (int i = 0; i < 4; i++) {
      TreeItem item0 = new TreeItem(tree, 0);
      item0.setText("Item " + i);
      for (int j = 0; j < 4; j++) {
        TreeItem item1 = new TreeItem(item0, 0);
        item1.setText("SubItem " + i + " " + j);
        for (int k = 0; k < 4; k++) {
          TreeItem item2 = new TreeItem(item1, 0);
          item2.setText("SubItem " + i + " " + j + " " + k);
        }
      }
    }
    tree.addListener(SWT.Collapse, new Listener() {
      public void handleEvent(Event e) {
        System.out.println("Collapse={" + e.item + "}");
      }
    });

    tree.getItems()[0].setExpanded(true);
    shell.pack();
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    display.dispose();
  }
}





Tree node selection event

import org.eclipse.swt.SWT;
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.Tree;
import org.eclipse.swt.widgets.TreeItem;
public class TreeNodeSelection {
  public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    Tree tree = new Tree(shell, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
    for (int i = 0; i < 12; i++) {
      TreeItem item = new TreeItem(tree, SWT.NONE);
      item.setText("Item " + i);
      for(int l = 0;l<12;l++){
        TreeItem litem = new TreeItem(item, SWT.NONE);
        litem.setText("Item " + i);
      }
      
    }
    tree.setSize(100, 100);
    tree.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        String string = event.detail == SWT.CHECK ? "Checked" : "Selected";
        System.out.println(event.item + " " + string);
      }
    });
    shell.setSize(200, 200);
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    display.dispose();
  }
}





Tree node selection listener

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
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.Tree;
import org.eclipse.swt.widgets.TreeItem;
public class TreeNodeSelectionListener {
  public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());
    final Tree tree = new Tree(shell, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
    for (int i = 0; i < 4; i++) {
      TreeItem item0 = new TreeItem(tree, 0);
      item0.setText("Item " + i);
      for (int j = 0; j < 4; j++) {
        TreeItem item1 = new TreeItem(item0, 0);
        item1.setText("SubItem " + i + " " + j);
        for (int k = 0; k < 4; k++) {
          TreeItem item2 = new TreeItem(item1, 0);
          item2.setText("SubItem " + i + " " + j + " " + k);
        }
      }
    }
    tree.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event e) {
        String string = "";
        TreeItem[] selection = tree.getSelection();
        for (int i = 0; i < selection.length; i++)
          string += selection[i] + " ";
        System.out.println("Selection={" + string + "}");
      }
    });
    tree.getItems()[0].setExpanded(true);
    shell.pack();
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    display.dispose();
  }
}