Использовать клавишу Tab для многострочного текста, поданного в swt?

Как предотвратить многострочное текстовое поле от" кражи " вкладок-нажатия клавиш?

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

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

2 ответов


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;
        }
    }
});

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

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