<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Dengues Studio: Google Group:http://groups.google.com/group/dengues; QQ Group:24885404.
    在自定義的一個Control上面顯示一個ToolTip,它能顯示節點的詳細信息,如下圖Dengues的實現:


    它的實現代碼在:
      1 /**
      2  * Qiang.Zhang.Adolf@gmail.com class global comment. Detailled comment <br/>
      3  * 
      4  * $Id: Dengues.epf Qiang.Zhang.Adolf@gmail.com 2008-4-29 qiang.zhang $
      5  * 
      6  */
      7 public class WarehouseNodeToolTip extends ToolTip {
      8 
      9     private final static int X_SHIFT;
     10 
     11     static {
     12         if ("gtk".equals(SWT.getPlatform()) || "carbon".equals(SWT.getPlatform())) {
     13             X_SHIFT = -26;
     14         } else {
     15             X_SHIFT = -23;
     16         }
     17     }
     18 
     19     private final static int Y_SHIFT = 1;
     20 
     21     private IWarehouseNode node;
     22 
     23     private final Control control;
     24 
     25     /**
     26      * Qiang.Zhang.Adolf@gmail.com WarehouseNodeToolTip constructor comment.
     27      * 
     28      * @param control
     29      */
     30     public WarehouseNodeToolTip(Control control) {
     31         super(control);
     32         setShift(new Point(11));
     33         this.control = control;
     34     }
     35 
     36     /*
     37      * (non-Javadoc)
     38      * 
     39      * @see org.eclipse.jface.window.ToolTip#createToolTipContentArea(org.eclipse.swt.widgets.Event,
     40      * org.eclipse.swt.widgets.Composite)
     41      */
     42     @Override
     43     protected Composite createToolTipContentArea(Event event, Composite parent) {
     44         Composite composite = createToolTipContentAreaComposite(parent);
     45         addIconAndLabel(composite, WarehouseLabelUtil.getNodeIcon(node), node.getLabel());
     46         IWarehouseObject object = node.getObject();
     47         if (object != null) {
     48             Object data2 = object.getData();
     49             if (data2 instanceof Storage) {
     50                 addIconAndLabel(composite, null, ((Storage) data2).getComment());
     51             }
     52         }
     53         return composite;
     54     }
     55 
     56     /**
     57      * Qiang.Zhang.Adolf@gmail.com Comment method "addIconAndLabel".
     58      * 
     59      * @param parent
     60      * @param composite
     61      */
     62     private void addIconAndLabel(Composite composite, Image image, String label) {
     63         Label imageLabel = new Label(composite, SWT.NONE);
     64         imageLabel.setForeground(composite.getDisplay().getSystemColor(SWT.COLOR_INFO_FOREGROUND));
     65         imageLabel.setBackground(composite.getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND));
     66         imageLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING));
     67         imageLabel.setImage(image);
     68 
     69         Label textLabel = new Label(composite, SWT.NONE);
     70         textLabel.setForeground(composite.getDisplay().getSystemColor(SWT.COLOR_INFO_FOREGROUND));
     71         textLabel.setBackground(composite.getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND));
     72         textLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER));
     73         textLabel.setText(removeTrailingNewline(DenguesTextUtil.getNotNullString(label)));
     74     }
     75 
     76     /**
     77      * Qiang.Zhang.Adolf@gmail.com Comment method "removeTrailingNewline".
     78      * 
     79      * @param text
     80      * @return
     81      */
     82     private String removeTrailingNewline(String text) {
     83         if (text.endsWith("\n")) {
     84             return text.substring(0, text.length() - 1);
     85         }
     86         return text;
     87     }
     88 
     89     /*
     90      * (non-Javadoc)
     91      * 
     92      * @see org.eclipse.jface.window.ToolTip#getLocation(org.eclipse.swt.graphics.Point, org.eclipse.swt.widgets.Event)
     93      */
     94     @Override
     95     public Point getLocation(Point tipSize, Event event) {
     96         Widget widget = getTipWidget(event);
     97         if (widget != null) {
     98             Rectangle bounds = getBounds(widget);
     99             if (bounds != null) {
    100                 return control.toDisplay(bounds.x + X_SHIFT, bounds.y + bounds.height + Y_SHIFT);
    101             }
    102         }
    103         return super.getLocation(tipSize, event);
    104     }
    105 
    106     /*
    107      * (non-Javadoc)
    108      * 
    109      * @see org.eclipse.jface.window.ToolTip#shouldCreateToolTip(org.eclipse.swt.widgets.Event)
    110      */
    111     @Override
    112     protected boolean shouldCreateToolTip(Event event) {
    113         node = null;
    114         if (super.shouldCreateToolTip(event)) {
    115             Widget tipWidget = getTipWidget(event);
    116             if (tipWidget != null) {
    117                 Rectangle bounds = getBounds(tipWidget);
    118                 if (bounds != null && control.getBounds().contains(bounds.x, bounds.y)) {
    119                     node = getWarehouseNode(tipWidget);
    120                 }
    121             }
    122         }
    123         if (node == null) {
    124             hide();
    125             return false;
    126         } else {
    127             return true;
    128         }
    129     }
    130 
    131     /**
    132      * Qiang.Zhang.Adolf@gmail.com Comment method "getWarehouseNode".
    133      * 
    134      * @param tipWidget
    135      * @return
    136      */
    137     private IWarehouseNode getWarehouseNode(Widget hoverObject) {
    138         if (hoverObject instanceof Widget) {
    139             Object data = (hoverObject).getData();
    140             if (data != null) {
    141                 if (data instanceof IWarehouseNode) {
    142                     return (IWarehouseNode) data;
    143                 }
    144             }
    145         }
    146 
    147         return null;
    148     }
    149 
    150     private Rectangle getBounds(Widget widget) {
    151         if (widget instanceof ToolItem) {
    152             ToolItem w = (ToolItem) widget;
    153             return w.getBounds();
    154         }
    155         if (widget instanceof TableItem) {
    156             TableItem w = (TableItem) widget;
    157             return w.getBounds();
    158         }
    159         if (widget instanceof TreeItem) {
    160             TreeItem w = (TreeItem) widget;
    161             return w.getBounds();
    162         }
    163         return null;
    164     }
    165 
    166     private Widget getTipWidget(Event event) {
    167         Point widgetPosition = new Point(event.x, event.y);
    168         Widget widget = event.widget;
    169         if (widget instanceof ToolBar) {
    170             ToolBar w = (ToolBar) widget;
    171             return w.getItem(widgetPosition);
    172         }
    173         if (widget instanceof Table) {
    174             Table w = (Table) widget;
    175             return w.getItem(widgetPosition);
    176         }
    177         if (widget instanceof Tree) {
    178             Tree w = (Tree) widget;
    179             return w.getItem(widgetPosition);
    180         }
    181 
    182         return widget;
    183     }
    184 
    185     /**
    186      * Qiang.Zhang.Adolf@gmail.com Comment method "createToolTipContentAreaComposite".
    187      * 
    188      * @param parent
    189      * @return
    190      */
    191     private Composite createToolTipContentAreaComposite(Composite parent) {
    192         Composite composite = new Composite(parent, SWT.NONE);
    193         GridLayout gridLayout = new GridLayout();
    194         gridLayout.numColumns = 2;
    195         gridLayout.marginWidth = 5;
    196         gridLayout.marginHeight = 2;
    197         composite.setLayout(gridLayout);
    198         composite.setBackground(composite.getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND));
    199         return composite;
    200     }
    201 }
    202 
    還有在org.dengues.warehouse.viewers.WarehouseView的初始化函數中實現:
     1 public void createPartControl(Composite parent) {
     2         viewer = new WarehouseTreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
     3         WarehouseViewProvider denguesViewProvider = new WarehouseViewProvider(this);
     4         viewer.setContentProvider(denguesViewProvider);
     5         viewer.setLabelProvider(denguesViewProvider);
     6         viewer.setSorter(new WarehouseViewNameSorter());
     7         IViewSite viewSite = getViewSite();
     8         viewer.setInput(viewSite);
     9         getSite().setSelectionProvider(viewer);
    10 
    11         makeActions();
    12         hookContextMenu();
    13         contributeToActionBars();
    14         WarehouseViewFactory.initDragAndDrop(viewer);
    15         hookDoubleClickAction();
    16         nodeToolTip = new WarehouseNodeToolTip(viewer.getControl());//新建一個Tooltip
    17         setPartName(Messages.getString("WarehouseView.Title.Name")); //$NON-NLS-1$
    18     }
    19 
    并添加兩個Listener:
     1 viewer.getTree().addFocusListener(new FocusAdapter() {
     2 
     3             @Override
     4             public void focusLost(FocusEvent e) {
     5                 nodeToolTip.hide();
     6             }
     7         });
     8 
     9         viewer.getTree().addKeyListener(new KeyListener() {
    10 
    11             public void keyPressed(KeyEvent e) {
    12                 if (e.keyCode == SWT.ESC) {
    13                     nodeToolTip.hide();
    14                 }
    15             }
    16 
    17             public void keyReleased(KeyEvent e) {
    18             }
    19 
    20         });
    這樣就可以了。



    Dengues論壇(http://groups.google.com/group/dengues/),一個很好的Eclipse開發者樂園.

    Feedback

    # re: [Dengues]自定義一個ToolTip,在你的View上顯示提示信息。  回復  更多評論   

    2008-04-30 10:31 by 王能
    今天的打開速度真慢,還不如:http://www.flash2game.cn 小小游戲站 這樣網站打開快.

    # re: [Dengues]自定義一個ToolTip,在你的View上顯示提示信息。  回復  更多評論   

    2008-04-30 12:26 by BeanSoft
    姓王的你就只會發廣告!

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    Dengues Studio: Google Group:http://groups.google.com/group/dengues; QQ Group:24885404.
    主站蜘蛛池模板: 国产白丝无码免费视频| 色妞www精品视频免费看| 99久久99这里只有免费的精品| 亚洲综合精品一二三区在线 | 69天堂人成无码麻豆免费视频| 免费A级毛片无码A∨免费| 国产亚洲一区二区三区在线不卡| 亚洲AV无码成人精品区在线观看 | 18成禁人视频免费网站| 亚洲一区无码中文字幕| caoporn成人免费公开| 国产91精品一区二区麻豆亚洲| 亚洲精品日韩专区silk| 亚洲黄色免费观看| 亚洲视频在线不卡| 野花高清在线观看免费完整版中文 | 一本色道久久综合亚洲精品高清| 色播亚洲视频在线观看| 玖玖在线免费视频| 无码乱人伦一区二区亚洲一| 永久免费不卡在线观看黄网站| 91情侣在线精品国产免费| 亚洲熟妇av一区二区三区下载 | 成在线人视频免费视频| 国产精品亚洲不卡一区二区三区| 天天爽亚洲中文字幕| 永久免费视频v片www| 人妖系列免费网站观看| 亚洲精品成人片在线观看精品字幕| 狠狠色伊人亚洲综合网站色 | 日韩精品亚洲专区在线影视| 四虎免费久久影院| 99久久成人国产精品免费| 亚洲第一成年网站大全亚洲| 成年美女黄网站18禁免费| 美女黄频免费网站| 亚洲成人精品久久| 成年人在线免费看视频| 美女无遮挡拍拍拍免费视频| 久久亚洲AV成人无码电影| 永久免费AV无码国产网站|