Использовать клавишу Tab для многострочного текста в SWT? - PullRequest
8 голосов
/ 29 января 2010

Как предотвратить «кражу» нажатий клавиш в виде многострочного текстового поля?

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

Как мне справиться с этим? Должен ли я написать некоторый пользовательский слушатель или я могу изменить поведение компонента, используя константу SWT?

Ответы [ 2 ]

20 голосов
/ 03 ноября 2010

SWT определяет механизм для реализации такого рода поведения с использованием класса TraverseListener. Следующий фрагмент (взятый из здесь ) показывает, как:

Text text1 = new Text(shell, SWT.MULTI | SWT.WRAP);
text1.setBounds(10,10,150,50);
text1.setText("Tab will traverse out from here.");
text1.addTraverseListener(new TraverseListener() {
    public void keyTraversed(TraverseEvent e) {
        if (e.detail == SWT.TRAVERSE_TAB_NEXT || e.detail == SWT.TRAVERSE_TAB_PREVIOUS) {
            e.doit = true;
        }
    }
});
3 голосов
/ 29 января 2010

Добавьте слушателя нажатия клавиш в текстовое поле или текстовое поле и реализуйте специальный обработчик для TAB . Я также видел эту «защелку вкладок» в приложениях Swing, и она обычно раздражает.

Вы можете предложить другой обработчик для Shift - TAB , который затем вставит \t, если вы все еще хотите разрешить вкладки в текстовом поле.

...