Настройка размера вкладки в однострочном текстовом виджете SWT

1

Я пишу представление для приложения RCP Eclipse и пытаюсь установить размер отображения вкладок в текстовом поле ввода. Текстовый виджет объявляется как:

Text txtInput;
txtInput = new Text(inputHolder, SWT.SINGLE);

Попытка установить tabsize (до 4 пробелов, а не по умолчанию 8), используя txtInput.setTabs(4); ничего не делает и просматривает источник для виджета " Text есть строка, которая запрещает изменение табуляции для виджетов одной строки.

void setTabStops (int tabs) {
    if ((style & SWT.SINGLE) != 0) return; 
    //rest of code to change tabStopsize
}

Я попытался установить Text виджета, чтобы иметь SWT.MULTI стиль и изменения TabSize, как ожидалось, но я не хочу многострочный ввод.

В чем причина ограничения на однострочные входы и существует ли какой-либо способ?

благодаря

  • 0
    Как вы вообще вводите tab в поле ввода текста? Не следует ли нажать кнопку Tab в поле ввода, чтобы просто перейти к следующему элементу ввода?
  • 0
    Нет, если вы используете addTraverseListener и устанавливаете его не для перемещения (используя e.doit = false; для TraverseEvent e)
Показать ещё 5 комментариев
Теги:
eclipse-rcp
swt

1 ответ

1

Как уже было установлено в комментариях, это невозможно сделать с помощью Text и SWT.SINGLE.

Однако вместо этого вы можете просто использовать StyledText :)

public static void main(String[] args)
{
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setText("StackOverflow");
    shell.setLayout(new GridLayout(1, false));

    StyledText text = new StyledText(shell, SWT.SINGLE | SWT.BORDER);
    text.addListener(SWT.Traverse, new Listener()
    {
        @Override
        public void handleEvent(Event e)
        {
            e.doit = false;
        }
    });
    text.setTabs(4);

    shell.pack();
    shell.open();

    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
        {
            display.sleep();
        }
    }
    display.dispose();
}

Работает отлично. Поддержка одной линии и вкладки.

  • 0
    Спасибо, это будет работать, за исключением того, что у нас есть текстовый виджет, передаваемый другим функциям, которые ожидают текстовые виджеты. Возможно, можно изменить их без особых хлопот, но я не уверен. Я должен изучить это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню