2010-09-07 2 views
3

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

ответ

1

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

+0

: Не могли бы вы подробнее рассказать о том, что вы сделали? Я столкнулся с той же проблемой, что и выше. – MindBrain

3

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

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

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

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

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

+0

выглядит как хорошее решение; я тоже собираюсь написать форму ввода данных всплывающих окон, и только начал созерцать tabindex. @Rob Mitchell: что именно вы подразумеваете под динамическим созданием табуляции? – Saad

Смежные вопросы