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

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

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

    DANCE WITH JAVA

    開發(fā)出高質(zhì)量的系統(tǒng)

    常用鏈接

    統(tǒng)計(jì)

    積分與排名

    好友之家

    最新評(píng)論

    Eclipse Rcp系列三 進(jìn)一步了解Viewer

    好在二的基礎(chǔ)上,繼續(xù),這個(gè)時(shí)候我們須要增加一個(gè)Viewer.在這里我須要說(shuō)一下,在eclipse的開發(fā)中用到的很多
    的是Viewer(視圖)這個(gè)概念,而不像Vb等開發(fā)中經(jīng)常用到的window(窗口),并不是說(shuō)Rcp中沒(méi)有窗口,而是使用
    頻率較低,所以分別說(shuō)一下如何添加窗口和Viewer

    一,添加一個(gè)對(duì)話框窗口:添加一個(gè)類如下,然後在須要顯視的地方調(diào)用一下open()方法
    不一定非要繼承自Dialog,這里為了漸少一些代碼,而且我使用中也多繼承自Dialog
    package hellorcp;

    import org.eclipse.swt.SWT;
    import org.eclipse.swt.widgets.Dialog;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Shell;

    public class HelloDialog extends Dialog {

     protected Object result;

     protected Shell shell;

     public HelloDialog(Shell parent, int style) {
      super(parent, style);
     }

     public HelloDialog(Shell parent) {
      this(parent, SWT.NONE);
     }
     public Object open() {
      createContents();
      shell.open();
      shell.layout();
      Display display = getParent().getDisplay();
      while (!shell.isDisposed()) {
       if (!display.readAndDispatch())
        display.sleep();
      }
      return result;
     }

     protected void createContents() {
      shell = new Shell(getParent(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
      shell.setSize(500, 375);
      shell.setText("SWT Dialog");
      //
     }

    }

    二,添加一個(gè)viewer,首先建立一個(gè)viewer,下邊是Designer(一個(gè)很好用的插件)自動(dòng)生成的一個(gè)viewer,
    也就是一個(gè)Viewer的大概結(jié)構(gòu)
    package hellorcp;

    import org.eclipse.jface.action.IMenuManager;
    import org.eclipse.jface.action.IToolBarManager;
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.ui.part.ViewPart;

    public class HelloView extends ViewPart {

     public static final String ID = "hellorcp.HelloView"; //$NON-NLS-1$

     public void createPartControl(Composite parent) {
      Composite container = new Composite(parent, SWT.NONE);
      //
      createActions();
      initializeToolBar();
      initializeMenu();
     }

     private void createActions() {
      // Create the actions
     }
     private void initializeToolBar() {
      IToolBarManager toolbarManager = getViewSite().getActionBars()
        .getToolBarManager();
     }

     private void initializeMenu() {
      IMenuManager menuManager = getViewSite().getActionBars()
        .getMenuManager();
     }

     public void setFocus() {
      // Set the focus
     }

    }
    顯視這個(gè)viewer,每個(gè)viewer須要加載到perspective上才能顯視,所以在Perspective.java中加入如下代碼
    public void createInitialLayout(IPageLayout layout) {
     layout.setEditorAreaVisible(false);//不顯視edit窗口
     String editorArea = layout.getEditorArea();
     //下邊兩句的不同是,一個(gè)顯視的是單頁(yè)窗口,一個(gè)顯視的是多頁(yè)窗口
     layout.addStandaloneView(HelloViewer.ID,false, IPageLayout.LEFT, 0.25f, editorArea);
     layout.addView(HelloViewer.ID, IPageLayout.RIGHT, 0.75f, editorArea);

    三,在viewer或者dialog上添加控件,如果裝有Designer可以直接拖放,如果沒(méi)有編程實(shí)現(xiàn)也可以
    大部份添加到下邊這樣的函數(shù)中
    viewer:
    public void createPartControl(Composite parent) {
      Composite container = new Composite(parent, SWT.NONE);
      //添加一個(gè)button
      final Button delBtn = new Button(container, SWT.NONE);
      delBtn.setText("刪除");
      delBtn.setBounds(10, 83, 44, 22);
      addListener2DelBtn(delBtn);
      
      createActions();
      initializeToolBar();
      initializeMenu();
    }
    dialog:
    protected void createContents() {
      shell = new Shell(getParent(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
      shell.setSize(500, 375);
      shell.setText("SWT Dialog");

    四,響應(yīng)事件,SWT的事件響應(yīng)和Swing是一樣的,添加listener
    delBtn.addSelectionListener(new SelectionAdapter() {
       public void widgetSelected(SelectionEvent e) {
        //加入你響應(yīng)事件要做的事情
       }
    });

    五,布局
    布局方面swt沒(méi)有什么新的地方,發(fā)個(gè)簡(jiǎn)單使用布局的例子,參考吧.另外布局還有很多搭配,但不是本文的
    重點(diǎn),暫時(shí)帶過(guò)
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.events.SelectionEvent;
    import org.eclipse.swt.events.SelectionListener;
    import org.eclipse.swt.graphics.Font;
    import org.eclipse.swt.graphics.Point;
    import org.eclipse.swt.graphics.Rectangle;
    import org.eclipse.swt.layout.FormAttachment;
    import org.eclipse.swt.layout.FormData;
    import org.eclipse.swt.layout.FormLayout;
    import org.eclipse.swt.widgets.Button;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.Table;
    import org.eclipse.swt.widgets.TableColumn;
    import org.eclipse.swt.widgets.TableItem;

    public class TableDemo {

      /**
      * @param args
      */
      public static void main(String[] args) {
        Display   dispMain = new Display ();
       
        final Shell shellMain = new Shell (dispMain, SWT.TITLE | SWT.MIN | SWT.BORDER);
           
        shellMain.setText("Table Demo");
       
        FormLayout formLayout = new FormLayout();
        formLayout.marginLeft = 10;
        formLayout.marginRight = 10;
        formLayout.marginTop = 10;
        formLayout.marginBottom = 10;
        formLayout.spacing = 10;
        shellMain.setLayout(formLayout);

        shellMain.setSize(800, 600);
        Point size = shellMain.getSize();
        Rectangle rect = dispMain.getBounds();
        shellMain.setLocation(rect.x + (rect.width-size.x)/2, rect.y + (rect.height-size.y)/2);

        Table demoTable = (Table)createContents(shellMain);    
        FormData formData = new FormData();
        formData.left = new FormAttachment(0, 0);
        formData.top = new FormAttachment(0, 0);
        formData.right = new FormAttachment(100, 0);
        formData.bottom = new FormAttachment(100, -34);
        demoTable.setLayoutData(formData);

        Button btnClose = new Button(shellMain, SWT.PUSH | SWT.FLAT);
        btnClose.setText("close");
       
        formData = new FormData();
        formData.right = new FormAttachment(100, 0);
        formData.top = new FormAttachment(demoTable, 0);
        formData.width = 100;
        formData.bottom = new FormAttachment(100, 0);
        btnClose.setLayoutData(formData);
       
        btnClose.addSelectionListener(
            new SelectionListener() {
              public void widgetDefaultSelected(SelectionEvent e) {
                this.widgetSelected(e);
              }
             
              public void widgetSelected(SelectionEvent e) {
                shellMain.close();
              }
            }
        );
        shellMain.open ();
       
        while (!shellMain.isDisposed ()) {
            if (!dispMain.readAndDispatch ()) {
              dispMain.sleep ();
            }
        }
        dispMain.dispose ();
        dispMain = null;
      }

      /**
      *
      * @param shellMain
      * @return
      */
      private static Table createContents(Shell shellMain) {
        Table table = new Table(shellMain, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
        table.setHeaderVisible(true);
        table.setLinesVisible(true);
        table.setFont(new Font(shellMain.getDisplay(), "Arial", 11, SWT.BOLD));
       
        TableColumn colNumber = new TableColumn(table, SWT.NONE);
        TableColumn colMedName = new TableColumn(table, SWT.CENTER);
        TableColumn colPrice = new TableColumn(table, SWT.CENTER);
        TableColumn colUnit = new TableColumn(table, SWT.CENTER);
        TableColumn colCount = new TableColumn(table, SWT.CENTER);
       
        colNumber.setWidth(25);
       
        colMedName.setWidth(150);
        colMedName.setText("Medicine Name");
       
        colPrice.setWidth(150);
        colPrice.setText("Medicine Price");
       
        colUnit.setWidth(150);
        colUnit.setText("Medicine Unit");
       
        colCount.setWidth(150);
        colCount.setText("Medicine Count");
       
        for(int i=0; i<10; i++) {
            TableItem item = new TableItem(table, SWT.NONE);
            item.setText(new String[]{i+1+"","4/2","4/3","4/4","4/5","4/6","4/7","4/8","4/9"});
        }
        return table;
      }
    }
    五,加入 右鍵 ,雙擊
    加入兩個(gè)listener
    //右鍵
    private void hookContextMenu() {
      MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
      menuMgr.setRemoveAllWhenShown(true);
      menuMgr.addMenuListener(new IMenuListener() {
       public void menuAboutToShow(IMenuManager manager) {
        HelloView.this.fillContextMenu(manager);
       }
      });
      Menu menu = menuMgr.createContextMenu(viewer.getControl());
      viewer.getControl().setMenu(menu);
      getSite().registerContextMenu(menuMgr, viewer);
    }
    private void fillContextMenu(IMenuManager manager) {
      manager.add(addAction);
      manager.add(modifyAction);
      manager.add(deleteAction);
      manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
    }
    //雙擊
    private void hookDoubleClickAction() {
      viewer.addDoubleClickListener(new IDoubleClickListener() {
       public void doubleClick(DoubleClickEvent event) {
        //doubleClickAction.run();
       }
      });
    }

    六,使用TableViewer
    Jface中封裝了talbeViewer TreeViewer等控件,能簡(jiǎn)單的實(shí)現(xiàn)很多功能,首先說(shuō)說(shuō)TableView
    //SWT.FULL_SELECTION 可以選中一整行
    //SWT.MULTI 可以選中多行
    viewer = new TableViewer(wareListGroup, SWT.BORDER | SWT.FULL_SELECTION
        | SWT.MULTI);
      final Table table = viewer.getTable();
      table.setHeaderVisible(true);//顯視表頭
      table.setLinesVisible(true);//顯視表格
      
      //實(shí)現(xiàn)點(diǎn)擊表頭自動(dòng)重新排序
      final TableColumn num = new TableColumn(table, SWT.NONE);
      num.addSelectionListener(new SelectionAdapter() {
       public void widgetSelected(SelectionEvent e) {
        resetSort(WareViewerSort.NUM);
        //resetSort是自己實(shí)現(xiàn)的重新排序的函數(shù),只須要把不通的ViewerSort重新設(shè)置給
        TableViewer,并刷新
       }
      });
      num.setAlignment(SWT.CENTER);
      num.setWidth(50);
      //這個(gè)地方使用了message,只要做過(guò)國(guó)際話的大概都能明白
      num.setText(Messages.getString("HelloView.warenum")); //$NON-NLS-1$

      final TableColumn name = new TableColumn(table, SWT.NONE);
      name.addSelectionListener(new SelectionAdapter() {
       public void widgetSelected(SelectionEvent e) {
        resetSort(WareViewerSort.NAME);//同上
       }
      });
      name.setWidth(80);
      name.setText(Messages.getString("WareView.warename")); //$NON-NLS-1$
      name.setAlignment(SWT.CENTER);
      
      final TableColumn desc = new TableColumn(table, SWT.NONE);
      desc.addSelectionListener(new SelectionAdapter() {
       public void widgetSelected(SelectionEvent e) {
        resetSort(WareViewerSort.DESC);
       }
      });
      desc.setWidth(110);
      desc.setText(Messages.getString("WareView.waredesc")); //$NON-NLS-1$

      final TableColumn price = new TableColumn(table, SWT.NONE);
      price.addSelectionListener(new SelectionAdapter() {
       public void widgetSelected(SelectionEvent e) {
        resetSort(WareViewerSort.PRICE);
       }
      });
      price.setWidth(70);
      price.setText(Messages.getString("WareView.wareprice")); //$NON-NLS-1$
      price.setAlignment(SWT.RIGHT);

      final TableColumn updDate = new TableColumn(table, SWT.NONE);
      updDate.addSelectionListener(new SelectionAdapter() {
       public void widgetSelected(SelectionEvent e) {
        resetSort(WareViewerSort.UPDDATE);
       }
      });
      updDate.setWidth(150);
      updDate.setText(Messages.getString("WareView.wareupddate")); //$NON-NLS-1$
      updDate.setAlignment(SWT.CENTER);
      //一個(gè)TableViewer里邊的數(shù)據(jù)變動(dòng)主要取決于下邊四句
      viewer.setContentProvider(new WareContentProvider()); //表的顯視
      viewer.setLabelProvider(new WareLabelProvider());    //表的數(shù)據(jù)提供者

      viewer.setInput(//真實(shí)的數(shù)據(jù)來(lái)源); //數(shù)據(jù)來(lái)源例如ArrayList等
      viewer.setSorter(new WareViewerSort()); //排序
      
    兩個(gè)provider的實(shí)現(xiàn)類似下邊的情況  
    class WareContentProvider implements IStructuredContentProvider {

      public Object[] getElements(Object inputElement) {
       if (inputElement instanceof Node) {
        ArrayList list = new ArrayList();
        makeWareList(((Node) inputElement), list);
        return list.toArray();
       }
       if (inputElement instanceof List) {
        return ((List) inputElement).toArray();
       }
       return null;
      }

      public void dispose() {
       // TODO Auto-generated method stub

      }

      public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
       // TODO Auto-generated method stub

      }

     }

    class WareLabelProvider extends LabelProvider implements
       ITableLabelProvider {

      public Image getColumnImage(Object element, int columnIndex) {
       // TODO Auto-generated method stub
       return null;
      }

      public String getColumnText(Object element, int columnIndex) {
       if (element instanceof Ware) {
        switch (columnIndex) {
        case 0:
         return ((Ware) element).getDisplayNum();
        case 1:
         return ((Ware) element).getDisplayName();
        case 2:
         return ((Ware) element).getDisplayDesc();
        case 3:
         return ((Ware) element).getDisplayPrice();
        case 4:
         return ((Ware) element).getDisplayUpdDate();
        default:
         break;
        }
       }
       return null;
      }

     }
     

    posted on 2006-11-06 14:32 dreamstone 閱讀(4519) 評(píng)論(0)  編輯  收藏 所屬分類: SWT和插件開發(fā)

    主站蜘蛛池模板: 牛牛在线精品观看免费正 | 精品亚洲永久免费精品| 久久永久免费人妻精品| 亚洲伊人久久大香线蕉在观| 亚洲一区AV无码少妇电影| 在线观着免费观看国产黄| 亚洲熟妇无码一区二区三区| 亚洲AV网站在线观看| 亚洲砖码砖专无区2023| 亚洲国产综合久久天堂| 一个人免费观看视频在线中文| 亚洲日本一区二区一本一道| 91在线老王精品免费播放| 国产亚洲视频在线观看| www亚洲一级视频com| 亚洲第一网站免费视频| 亚洲一卡一卡二新区无人区| 国产亚洲一区二区三区在线不卡| 色播在线永久免费视频网站| 亚洲嫩模在线观看| 黄色网址免费大全| 亚洲AV一区二区三区四区| 免费大黄网站在线观看| 羞羞视频免费网站在线看| 亚洲kkk4444在线观看| 四虎影院永久免费观看| 美女内射毛片在线看免费人动物| 日韩免费高清一级毛片| 亚洲av无码潮喷在线观看| 日本免费无遮挡吸乳视频电影| 一级特黄aa毛片免费观看| 一区二区三区免费视频观看| 亚洲中文字幕一二三四区| 亚洲一区二区影院| 在线免费观看韩国a视频| 99re免费在线视频| 亚洲AV无码AV男人的天堂不卡| 亚洲第一福利视频| 亚洲午夜国产精品无码老牛影视| h视频在线观看免费完整版| 亚洲精品色在线网站|