SWT — Флажок в центре просмотра таблиц

Последний столбец моего средства просмотра таблиц содержит только флажок. Флажок появляется в левой части ячейки, а поскольку имя столбца довольно длинное, оно выглядит чертовски уродливо. Как я могу центрировать флажок в середине ячейки? Возможно ли это без использования изображений? Вот как я создаю столбец:

    // third column - check box. temporary
    TableColumn column = new TableColumn(viewer.getTable(), SWT.NONE);
    column.setText("PrettyLongColumnName");
    column.setWidth(100);
    TableViewerColumn checkColumn = new TableViewerColumn(viewer, column);
    checkColumn.setLabelProvider(new ColumnLabelProvider() {
        // the checkboxes should be disposed and rebuilt when input changes
        @Override
        public void update(ViewerCell cell) {
            MyObject system = (MyObject) cell.getElement();
            TableItem item = (TableItem) cell.getItem();
            Button button;
            if (buttonsMap.containsKey(cell.getElement())) {
                button = rightTableButtons.get(cell.getElement());
            } else {
                button = new Button((Composite) cell.getViewerRow().getControl(), SWT.CHECK);
                button.setEnabled(true);                   
                buttonsMap.put(cell.getElement(), button);

                TableEditor editor = new TableEditor(item.getParent());
                editor.grabHorizontal = true;
                editor.grabVertical = true;
                editor.setEditor(button, item, cell.getColumnIndex());
                editor.layout();
                }
            }
        }
    });

person J.Doe    schedule 20.03.2018    source источник
comment
Единственный известный мне способ — использовать изображения и OwnerDrawLabelProvider.   -  person greg-449    schedule 20.03.2018


Ответы (1)


TL;DR: изначально недоступен, но может быть реализован с помощью эпического хакерства.

Флажки на самом деле являются функцией ОС. Поскольку SWT является кроссплатформенным, мы полагаемся на то, что он предоставляется операционной системой.

AFIK единственное, что есть во всех ОС (Gtk/Win32/Cocoa), это один флажок в первом столбце. Другие необычные функции должны быть реализованы вручную.

Я видел, как люди делают это, рисуя пользовательские значки, а затем обновляя значок, когда вы нажимаете на него с помощью прослушивателей событий.

Один пример того, как рисовать значки справа, находится в этого фрагмента. Вам нужно будет добавить прослушиватель кликов, чтобы изменить значок при нажатии на отмеченный/не отмеченный.

Обратите внимание: это может привести к тому, что ваше приложение будет выглядеть несовместимо на разных платформах и в темах (например, в темной теме). Чтобы обойти это, у нас были люди, которые фактически генерировали собственный флажок, затем программно делали снимок экрана, а затем рисовали его в правой части столбца. Я думаю, что это хакерство в лучшем виде.

Дайте мне знать, если у вас есть вопросы.

person Leo Ufimtsev    schedule 23.03.2018
comment
Спасибо чувак. Да, я согласен, что это слишком большая путаница. Я решил уменьшить имя и ширину столбца, чтобы флажки теперь не выглядели НАСТОЛЬКО плохо. Я принял ваш ответ за то, что нашел время, чтобы объяснить его. мир - person J.Doe; 26.03.2018