2014-09-04 51 views
0

我是E4中的初學者,並且完全使用JAVA。 我創建了一個partHandler,我想要顯示在這個部分的其他類中創建的表。表在TreeTableCreation類中被複制。如果你可以幫忙,這將是很好的。 現在它創建一個Tab,但沒有內部表,並拋出Nullpointer異常。塔克你。e4在Mpart中使用配件處理程序加載表

public class DynamicPartHandlerCode { 

@Execute 
public void execute(EModelService modelService, MApplication application, final IEclipseContext context, 
     @Named(IServiceConstants.ACTIVE_SHELL) final Shell shell) { 
    EPartService partService = context.get(EPartService.class); 
    // create new part 
    MPart mPart = modelService.createModelElement(MPart.class); 
    String id = "org.testeditor.ui.uidashboard.partdescriptor.0"; 
    mPart = partService.findPart(id); 
    if (mPart == null) { 
     mPart = partService.createPart(id); 
    } 

    List<MPartStack> stacks = modelService.findElements(application, null, MPartStack.class, null); 
    stacks.get(2).getChildren().add(mPart); 

    ((TreeTableCreation) mPart.getObject()).createTable(); 

    partService.showPart(mPart, PartState.ACTIVATE); 
} 
} 

這裏類來創建表

public class TreeTableCreation { 
// Injected services 

@Inject 
@Named(IServiceConstants.ACTIVE_SHELL) 
Shell shell; 

@Inject 
MPart mPart; 

public void createTable() { 
    // public static void main(String[] args) { 
    // Shell shell; 
    Display display = new Display(); 
    // final Shell shell = new Shell(display); 
    // shell = new Shell(Display.getCurrent()); 
    // shell.setSize(500, 500); 
    shell.setLayout(new FillLayout()); 
    final Tree tree = new Tree(shell, SWT.BORDER | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL); 
    tree.setHeaderVisible(true); 
    tree.setLinesVisible(true); 
    final TreeViewer v = new TreeViewer(tree); 

    // Header der 
    // Tabelle********************************************************************* 
    String[] titles = { "Datum ", "Testname", "Erfolgreich", "Durchgefallen", "Dauer", "Läufe" }; 
    for (int i = 0; i < titles.length; i++) { 
     TreeColumn column = new TreeColumn(tree, SWT.CENTER); 
     column.setText(titles[i]); 
     column.setWidth(150); 
    } 

    v.setLabelProvider(new MyLabelProvider()); 
    v.setContentProvider(new MyContentProvider()); 
    v.setInput(TestResultTest.getData()); 

    // // selecting cells getting 
    // // items****************************************************** 
    tree.addListener(SWT.MouseDoubleClick, new Listener() { 
     final int columnCount = 6; 

     public void handleEvent(Event event) { 
      Point pt = new Point(event.x, event.y); 
      TreeItem item = tree.getItem(pt); 
      int index = tree.indexOf(item); 
      System.out.println("Item Index-" + index); 
      if (item == null) 
       return; 
      for (int i = 0; i < columnCount; i++) { 
       Rectangle rect = item.getBounds(i); 
       if (rect.contains(pt)) { 


        TreeTableCreation2 anothershell = new TreeTableCreation2(); 
        DrawMultipleLine grafshell = new DrawMultipleLine(); 

        anothershell.open(); 
        System.out.println("Läufe gewählt"); 

        grafshell.open(); 
        System.out.println("Dauer gewählt"); 
       } 
      } 
     } 
    }); 

    shell.pack(); 
    shell.open(); 
    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) { 
      display.sleep(); 
     } 
    } 

    display.dispose(); 
} 

}

+0

哪裏扔了'NullPointerException'? – APerson 2014-09-04 13:25:51

回答

0

你不能只是轉換一個獨立的SWT這樣的程序。你需要閱讀關於編寫e4程序的教程,例如this one

你不能創建一個新的Display,e4已經有一個。

你一定不要搞亂目前的Shell,e4負責這件事,並有Shell已經有很多其他的對象。

請勿撥打shell.packshell.open或使用顯示分派循環。

請勿棄置顯示器。

不要做((TreeTableCreation) mPart.getObject()).createTable();。使用零件的@PostConstruct方法。

因此,像:

public class TreeTableCreation { 

@PostConstruct 
public void createTable(Composite parent) { 

    final Tree tree = new Tree(parent, SWT.BORDER | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL); 
    tree.setHeaderVisible(true); 
    tree.setLinesVisible(true); 
    final TreeViewer v = new TreeViewer(tree); 

    // Header der 
    // Tabelle********************************************************************* 
    String[] titles = { "Datum ", "Testname", "Erfolgreich", "Durchgefallen", "Dauer", "Läufe" }; 
    for (int i = 0; i < titles.length; i++) { 
     TreeColumn column = new TreeColumn(tree, SWT.CENTER); 
     column.setText(titles[i]); 
     column.setWidth(150); 
    } 

    v.setLabelProvider(new MyLabelProvider()); 
    v.setContentProvider(new MyContentProvider()); 
    v.setInput(TestResultTest.getData()); 

    // // selecting cells getting 
    // // items****************************************************** 
    tree.addListener(SWT.MouseDoubleClick, new Listener() { 
     final int columnCount = 6; 

     public void handleEvent(Event event) { 
      Point pt = new Point(event.x, event.y); 
      TreeItem item = tree.getItem(pt); 
      int index = tree.indexOf(item); 
      System.out.println("Item Index-" + index); 
      if (item == null) 
       return; 
      for (int i = 0; i < columnCount; i++) { 
       Rectangle rect = item.getBounds(i); 
       if (rect.contains(pt)) { 


        TreeTableCreation2 anothershell = new TreeTableCreation2(); 
        DrawMultipleLine grafshell = new DrawMultipleLine(); 

        anothershell.open(); 
        System.out.println("Läufe gewählt"); 

        grafshell.open(); 
        System.out.println("Dauer gewählt"); 
       } 
      } 
     } 
    }); 
} 
相關問題