GWT tabindex внутри диалогового окна


В моем приложении gwt на некоторых экранах я создаю диалоговое окно с формой ввода. Я хотел бы иметь возможность использовать свойство tabindex, но только в этом диалоговом окне. (т. е. циклы от первого до последнего поля этого диалогового окна) прямо сейчас, если я нажму tab, когда будет выбрано последнее поле, фокус переместится на первый индекс вкладки, который оказывается элементом позади диалогового окна (установлен как стекло). Это довольно раздражает, так как теперь приходится вкладывать несколько раз, пока фокус не вернется к первому диалогу поле. Установка диалогового окна в модальное еще хуже, как только вы вкладываете вне диалогового окна, клавиша tab игнорируется, так как объекты вне диалогового окна больше не получают события клавиатуры (не может tab out!). Является ли мой единственный вариант прослушивания клавиши tab и обработки вкладок вручную? Я был бы в порядке с вкладками, выходящими за пределы моего приложения и на панель url (например), пока он возвращается в мое диалоговое окно, не проходя через все элементы под ним.

2 3

2 ответа:

Что ж, лучше поздно, чем никогда! У меня была такая же проблема. Решение на самом деле довольно простое.

Предположим, у вас есть диалоговое окно, которое наследуется от Composite и содержит виджеты для ввода данных и кнопки. Главное окно также содержит некоторые виджеты пользовательского интерфейса, такие как поля ввода и некоторые кнопки. Вы устанавливаете порядок вкладок для этого главного окна. При нажатии кнопки для вызова диалогового окна установите каждый из элементов управления в главном окне (setTabIndex(-1)), который отключает порядок вкладок.

Для в новом диалоговом окне зарегистрируйте в конструкторе следующий код:

this.addAttachHandler( new AttachEvent.Handler() {
    @Override
    public void onAttachOrDetach(AttachEvent event) {
        if(isAttached()) {
            setTabOrder();
        } else {
            clearTabOrder();
        }               
    }
});

, а затем создайте два метода setTabOrder() и clearTabOrder(), которые вызываются соответствующим образом. Похоже, что GWT путается с несколькими окнами с порядком вкладок. Вы можете прекратить путаницу, динамически создавая порядок вкладок, когда каждое диалоговое окно отображается / скрыто.

Ну, после почти месяца без ответа, я решил пойти с ручной обработкой клавиш tab. Работает как шарм, но теперь он игнорирует строку url в цикле вкладок (отлично). Я использовал этот пост в блоге, чтобы начать работу: http://albertattard.blogspot.com/2009/11/capturing-tab-key-in-gwt-textarea.html Я просто добавил панель фокусировки в корень моего диалога.