private void initTable() {
        // JobNode Enabled tick box
        jobNodeListHelper.addEnabledTickBoxColumn(dataGrid, true);

        // Node Name
        final Column<JobNodeAndInfo, CommandLink> nodeNameColumn = DataGridUtil.commandLinkColumnBuilder(
                        buildOpenJobNodeCommandLink())
                .enabledWhen(jobNodeListHelper::isJobNodeEnabled)
                .withSorting(FindJobNodeCriteria.FIELD_ID_NODE)
                .build();
        DataGridUtil.addCommandLinkFieldUpdater(nodeNameColumn);
        dataGrid.addResizableColumn(
                nodeNameColumn,
                DataGridUtil.headingBuilder("Node")
                        .withToolTip("The Stroom node the job runs on")
                        .build(),
                300);

        // Node State
        jobNodeListHelper.addNodeStateColumn(dataGrid);
        // Type
        jobNodeListHelper.addTypeColumn(dataGrid);
        // Schedule.
        jobNodeListHelper.addScheduleColumn(dataGrid);

        // Max.
        dataGrid.addColumn(
                DataGridUtil.valueSpinnerColumnBuilder(this::getTaskLimit, 1L, 9999L)
                        .enabledWhen(jobNodeListHelper::isJobNodeEnabled)
                        .withFieldUpdater((rowIndex, jobNodeAndInfo, value) -> {
                            if (jobNodeAndInfo != null) {
                                jobNodeAndInfo.getJobNode().setTaskLimit(value.intValue());
                                restFactory
                                        .create(JOB_NODE_RESOURCE)
                                        .call(res -> res.setTaskLimit(jobNodeAndInfo.getId(), value.intValue()))
                                        .taskMonitorFactory(getView())
                                        .exec();
                            }
                        })
                        .build(),
                DataGridUtil.headingBuilder("Max Tasks")
                        .withToolTip("The task limit for this job on this node")
                        .build(),
                80);

        // Current Tasks (Cur).
        dataGrid.addColumn(
                DataGridUtil.textColumnBuilder(jobNodeListHelper::getCurrentTaskCountAsStr)
                        .enabledWhen(jobNodeListHelper::isJobNodeEnabled)
                        .rightAligned()
                        .build(),
                DataGridUtil.headingBuilder("Current Tasks")
                        .rightAligned()
                        .withToolTip("The number of the currently executing tasks on this node for this job")
                        .build(),
                100);

        // Last executed.
        jobNodeListHelper.addLastExecutedColumn(dataGrid);

        // Next scheduled
        jobNodeListHelper.addNextExecutedColumn(dataGrid);

        // Action column
        jobNodeListHelper.addActionColumn(dataGrid);

        DataGridUtil.addEndColumn(dataGrid);
    }
Add the columns to the table.
stroom-core-client/src/main/java/stroom/job/client/presenter/JobNodeListPresenter.java