GWT Tabindex внутри диалогового окна - PullRequest
3 голосов
/ 07 сентября 2010

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

Ответы [ 2 ]

3 голосов
/ 11 сентября 2011

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

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

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

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

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

1 голос
/ 03 октября 2010

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

...