简体   繁体   中英

e4 load table in Mpart using parthandler

i am a beginner in E4 and at all in JAVA. i created a partHandler and i want to display table which is created in other class in this part. table is cteated in TreeTableCreation class. it would be nice if you can help. now it creates a Tab, but no table inside, and throws Nullpointer exception. tahnk you.

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);
}
}

here class to create table

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();
}

}

You can't just convert a standalone SWT program like this. You need to read a tutorial on writing e4 programs such as this one

You must not create a new Display , e4 already has one.

You must not mess around with the current Shell , e4 is in charge of that and has many other objects already in the Shell .

Do not call shell.pack , shell.open or use a display dispatch loop.

Do not dispose of the display.

Do not do ((TreeTableCreation) mPart.getObject()).createTable(); . Use the @PostConstruct method of the part.

So something like:

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");
                }
            }
        }
    });
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM