5

私は vaadin 7 を使用しており、アプリケーションでサブウィンドウを使用することがあります。あるケースでは、いくつかのコンポーネントを含むモーダル ウィンドウがあります。モーダル ウィンドウ内の一部のコンポーネントをクリックすると、別のウィンドウが開きます。ユーザーがウィンドウの外側をクリックしたときに、このウィンドウを自動的に閉じるようにしたいと思います (たとえば、モーダル ウィンドウを再度クリックした場合など)。Vaadin Samplerでは、ソースを表示するときにこの動作が実装されているようです (右上隅のソース ボタンをクリックします)。また、モーダル ウィンドウからではなく、UI またはその他のサブウィンドウから開いた場合の動作も同じである必要があります。

私はいくつかのことを試しました:

  • コンポーネント (ボタンまたは画像) からウィンドウを開く必要があるため、Popupview を使用することはできません。

  • 新しいウィンドウに BlurListener を追加しても機能しません。ウィンドウ内をクリックすると、blurevent が発生するためです (ウィンドウの移動など)。

  • UI に ClickListener を追加しても、モーダル ウィンドウをクリックしたときにイベントが発生しなかったため、役に立ちませんでした。

それを達成する正しい方法は何ですか?

ありがとうラファエル

4

6 に答える 6

3

ウィンドウがモーダルの場合、これが役立ちます:

public void showWindow() {
    final Window window = new Window();
    Button closeButton = new Button("\u00a0"); //  
    closeButton.addClickListener(new ClickListener() {
        private static final long serialVersionUID = 1L;

        @Override
        public void buttonClick(ClickEvent event) {
            window.close();
        }
    });
    closeButton.addStyleName(BaseTheme.BUTTON_LINK);
    closeButton.addStyleName("my-style");
    window.setContent(new VerticalLayout(closeButton));
    window.setModal(true);
    window.setWidth("300px");
    window.setHeight("150px");
    UI.getCurrent().addWindow(window);
}

このCSSで:

.v-button.v-button-my-style {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: -5;
}
于 2014-09-26T20:20:00.870 に答える
0

あなたが言及した Vaadin Sampler の動作は、モーダルではないウィンドウに依存しています。

 window.setModal(false); 

この場合、クリック リスナーをウィンドウ (またはその下の UI/レイアウト) に追加すると、子ウィンドウが閉じます。

 window.addClickListener(new MouseEvents.ClickListener() {

        @Override
        public void click(MouseEvents.ClickEvent event) {
            childWindow.close();         
        }
    });

ウィンドウがモーダルの場合、他のコンポーネントにアクセスできないため、現在のウィンドウの外で発生する可能性のあるクリック イベントを定義する簡単な方法はおそらくありません。

于 2013-12-30T21:39:04.210 に答える