private int determineColumnWidth(final String text) {
        // Not a fixed width font so some chars are narrower
        final long thinCharsCount = text.chars()
                .filter(chr ->
                        chr == 'I'
                        || chr == 'i'
                        || chr == 'j'
                        || chr == 'l'
                        || chr == 'r'
                        || chr == 't')
                .count();
        final long wideCharsCount = text.chars()
                .filter(chr ->
                        chr == 'M'
                        || chr == 'W'
                        || chr == 'm'
                        || chr == 'w')
                .count();
        final long normalCharsCount = text.length() - thinCharsCount - wideCharsCount;
        // Adjust for the narrow chars present
        final double adjustedCharsCount = normalCharsCount
                                          + ((double) thinCharsCount * 0.6)
                                          + ((double) wideCharsCount * 1.3);
        // Now scale the to pixels
        final int colWidth = (int) (adjustedCharsCount * 8.5);
//        GWT.log("text: " + text
//                + " length: " + text.length()
//                + " eff width: " + effectiveWidth
//                + " col width: " + colWidth);
        return Math.max(colWidth, SMALL_COL);
    }
Crude method to size a column by its header
stroom-core-client/src/main/java/stroom/cache/client/presenter/CacheNodeListPresenter.java