private void initTableColumns() {
        // Word
        final Column<Word, String> wordColumn = DataGridUtil.textColumnBuilder(Word::getWord)
                .withSorting(FIELD_WORD)
                .build();
        dataGrid.addAutoResizableColumn(
                wordColumn,
                DataGridUtil.headingBuilder("Word")
                        .withToolTip("The Dictionary word or line.")
                        .build(),
                300);

        // Type
        final Column<Word, String> typeColumn = DataGridUtil.textColumnBuilder(this::mapWordToImportType)
                .withSorting(FIELD_TYPE)
                .build();
        dataGrid.addResizableColumn(
                typeColumn,
                DataGridUtil.headingBuilder("Type")
                        .withToolTip("Whether the word is local to this dictionary or imported from another.")
                        .build(),
                80);

        // Primary Source
        final Column<Word, CommandLink> nodeNameColumn = DataGridUtil.commandLinkColumnBuilder(
                        buildOpenDocCommandLink())
                .withSorting(FIELD_SOURCE_NAME)
                .build();
        DataGridUtil.addCommandLinkFieldUpdater(nodeNameColumn);
        dataGrid.addResizableColumn(
                nodeNameColumn,
                DataGridUtil.headingBuilder("Source Dictionary")
                        .withToolTip("The dictionary that contains the word.")
                        .build(),
                300);

        // Additional sources
        final Column<Word, String> additionalSourcesColumn = DataGridUtil.textColumnBuilder(
                        this::wordToAdditionalSourcesStr)
                .build();
        dataGrid.addResizableColumn(
                additionalSourcesColumn,
                DataGridUtil.headingBuilder("Additional Source Dictionaries")
                        .withToolTip("Additional Dictionaries that also contain the word.")
                        .build(),
                400);

        dataGrid.addEndColumn(new EndColumn<>());

        dataGrid.addColumnSortHandler(event -> {
            if (event.getColumn() instanceof OrderByColumn<?, ?>) {
                //noinspection PatternVariableCanBeUsed // cos GWT
                final OrderByColumn<?, ?> orderByColumn = (OrderByColumn<?, ?>) event.getColumn();

                fieldSort = new CriteriaFieldSort(
                        orderByColumn.getField(),
                        !event.isSortAscending(),
                        orderByColumn.isIgnoreCase());
                updateGrid();
            }
        });
    }
Add the columns to the table.
stroom-core-client/src/main/java/stroom/dictionary/client/presenter/WordListPresenter.java