2017-08-21 3 views
0

私はVaadinに焦点を当てて問題があります。この問題は、新しいウィンドウ(ダイアログ)を開いたときなどに発生します。ボタンをクリックする:Vaadinはフォーカスされた要素を取得

new Window(caption, component); 

ウィンドウが閉じると、メソッドclose()が実行されます。このようなウィンドウクラスからの実装:

public void close() { 
    UI uI = getUI(); 

    // Don't do anything if not attached to a UI 
    if (uI != null) { 
     // focus is restored to the parent window 
     uI.focus(); 
     // window is removed from the UI 
     uI.removeWindow(this); 
    } 
} 

示されているように、フォーカスは、ウィンドウを開いたコンポーネントの代わりにUIに設定されています。コンポーネントのフォーカスを例えばに設定する方法はありますか?ウィンドウを開いたボタン?私は一般的な解決策を探しています。私はウィンドウクラスを拡張し、コンポーネントのフィールドを作成する回避策があります。ウィンドウが作成された後、コンポーネントフィールドをウィンドウを開いたものに設定します。しかし、私が言ったように - 私は回避策としてそれを参照してください。

答えて

0

私は、サーバー側のコードでフォーカスを処理する一般的な方法を知らない。私のウィンドウを閉じた後、フォーカスを制御するための2つのアプローチ使用されています:

  1. をウィンドウを拡張するクラスのフィールドとしてFocusableのを維持し、

  2. 近い利用近いリスナーに焦点を当て、そこ
を次のコンポーネントにフォーカスアプローチ2より複雑なケースにも拡張することができます。たとえば、確認ダイアログには、イエスとノーアンサーを処理するリスナーがあり、アンサーに応じて異なるコンポーネントにフォーカスを当てることができます。

ショートカットリスナーが機能するようにするには、少なくともUIオブジェクトにフォーカスを置くことをお勧めします。

また、Vaadinのバグ#5891に気付く必要があります。これは、ウィンドウのクローズに焦点を当ててしまう可能性があります。

+0

私はそれを第1のポイントで説明したのと同じ方法で実装しました。しかし残念なことに汎用的ではなく、Windowを使用しているコンポーネントには多くの変更が必要です。 – Adam

関連する問題