Best Practices - SWT-Tabelle, TableViewer, EditingSupport

Bin ich eine Tabelle hinzufügen meine Haupt-GUI. Es ist angezeigt und die Daten hat es wohl zeigen. Aber ich habe das Gefühl, ein großes Durcheinander von code, und es ist nicht richtig strukturiert. Ich bin auf der Suche nach jemandem, der verwendet SWT eine Menge, um mir zu helfen, die richtigen Teile des Codes an den richtigen stellen.

Klasse Eine Main-GUI mit TableViewer

Klasse B (ArrayList) Daten für Tabelle /Klasse B1 - DataModel für ArrayList Struktur

Klasse A - hat-Methode für die Erstellung TableViewer

  //////////////////////////////////////////////////////////////////////////
  //                        createTableViewer()                          //
  //////////////////////////////////////////////////////////////////////////
private TableViewer createTableViewer(Composite parent) {
    viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
    createColumns(parent, viewer);
    table = viewer.getTable();
    table.setHeaderVisible(true);
    table.setLinesVisible(true);

    //Layout the viewer
    GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
    viewer.setContentProvider(new ArrayContentProvider());
    *** Getting Array from Class B ***       
    viewer.setInput(AplotDataModel.getInstance().getArrayData());
    viewer.getControl().setLayoutData(gridData);
    return viewer;
}

Klasse A hat auch createColumns() Methode und eine createTableViewerColumn() Methode.

 //////////////////////////////////////////////////////////////////////////
 //                        createColumns()                              //
 //////////////////////////////////////////////////////////////////////////
private void createColumns(final Composite parent, final TableViewer viewer) {
    String[] titles = { "ItemId", "RevId", "PRL", "Dataset Name", "EC Markup" };
    int[] bounds = { 150, 150, 100, 150, 100 };

    TableViewerColumn col = createTableViewerColumn(titles[0], bounds[0], 0);
    col.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            AplotDatasetData item = (AplotDatasetData) element;
            return item.getDataset().toString();
        }
    });

    col = createTableViewerColumn(titles[1], bounds[1], 1);
    col.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            AplotDatasetData item = (AplotDatasetData) element;
            return item.getRev().toString();
        }
    });

    col = createTableViewerColumn(titles[2], bounds[2], 2);
    col.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            AplotDatasetData item = (AplotDatasetData) element;
            return item.getPRLValue();
        }
    });

    col = createTableViewerColumn(titles[3], bounds[3], 3);
    col.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            AplotDatasetData item = (AplotDatasetData) element;
            return item.getDatasetName();
        }
    });

    col = createTableViewerColumn(titles[4], bounds[4], 4);
    col.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            AplotDatasetData item = (AplotDatasetData) element;
            return item.getECMarkupValue();
        }
    });
}

 //////////////////////////////////////////////////////////////////////////
 //                      createTableViewerColumn()                      //
 //////////////////////////////////////////////////////////////////////////
private TableViewerColumn createTableViewerColumn(String title, int bound, final int colNumber) {
    final TableViewerColumn viewerColumn = new TableViewerColumn(viewer, SWT.NONE);
    final TableColumn column = viewerColumn.getColumn();
    column.setText(title);
    column.setWidth(bound);
    column.setResizable(true);
    column.setMoveable(true);
    return viewerColumn;
}

Frage 1: Ist das die beste Praxis, hinzufügen einer Tabelle in meiner GUI-Klasse? Scheint wie eine Menge code für die GUI-Klasse.

Frage 2: Sollte die createColumns() - Methode und die createTableViewerColumn() Methode verschoben werden, um der Klasse B?

Frage 3: Meine Letzte Spalte in der Tabelle wird ein dropdown/ComboBox. Also ich werde zu haben, um erweitern einer Klasse mit EditingSupport. Sollte es sein, Klasse A oder der Klasse B?

Bevor ich weiter mit diesem Projekt möchte ich sicherstellen, dass ich es richtig strukturiert ist.

InformationsquelleAutor der Frage jkteater | 2012-09-04

Schreibe einen Kommentar