Vaadin Sub-Window 不关闭
Vaadin Sub-Window Does not close
我创建的subwindow没有关闭。我看到有些人遇到了同样的问题并发布了同样的问题,但我仍然找不到解决方案。我检查了 this, and this ,and this,and that,但找不到解决方案。这是我下面的代码,用于 window 的相应 class:
public class CommunicationConfigWindow extends Window
{
private static CommunicationConfigWindow INSTANCE;
private final Accordion catAccordion = new Accordion();
private final VerticalLayout layout = new VerticalLayout();
private final HorizontalLayout toolbar = new HorizontalLayout();
private final Button applyButton = new Button( "Save&Close" );
private final Button cancelButton = new Button( "Cancel" );
private CommunicationConfigWindow( )
{
this.toolbar.setDefaultComponentAlignment( Alignment.MIDDLE_CENTER );
this.applyButton.setSizeFull();
this.cancelButton.addClickListener( e -> {
UI.getCurrent().removeWindow( this );
this.close();
} );
this.applyButton.addStyleName( ValoTheme.BUTTON_FRIENDLY );
this.cancelButton.addStyleName( ValoTheme.BUTTON_DANGER );
this.cancelButton.setSizeFull();
this.toolbar.addComponents( this.cancelButton, this.applyButton );
this.toolbar.setSizeFull();
this.catAccordion.addTab( new GeneralCatLayer( CatVersionEnum.CAT21 ), "CAT 21" );
this.catAccordion.addTab( new GeneralCatLayer( CatVersionEnum.CAT23 ), "CAT 23" );
this.catAccordion.addTab( new GeneralCatLayer( CatVersionEnum.CAT247 ), "CAT 247" );
this.layout.addComponents( this.catAccordion, this.toolbar );
this.setContent( this.layout );
}
public static CommunicationConfigWindow getINSTANCE()
{
if ( CommunicationConfigWindow.INSTANCE == null )
{
CommunicationConfigWindow.INSTANCE = new CommunicationConfigWindow();
}
return CommunicationConfigWindow.INSTANCE;
}
}
This is before I click on cancel.
This is after I click on cancel.
我确实从 Display Settings Button
弹出这个 window
。发生的事情是:
- 我单击“显示设置”按钮,window 弹出。
- 之前 我点击取消,我点击显示设置按钮,它没有创建一个新的 window 因为它是单例。
- 我点击取消并再次点击显示设置按钮,旧的乱七八糟的按钮留在那里并创建了一个新的 window。
我基本上希望 window 在我单击取消或关闭按钮时消失,但它只是 not.Why?
提前致谢。
可能是你的单例问题。你真的需要单例 window ?
如果您只想添加一个 window 单击按钮。您可以尝试进行一些验证,例如
Window yourWindow = new Window();
if (UI.getCurrent().getWindows().contains(yourWindow)) {
getUI().addWindow(yourWindow);
}
覆盖 window class
中的等号
我没有改变任何东西,花了 2 个小时后,它开始工作了,尽管我没有改变任何东西,我也不知道为什么。
我创建的subwindow没有关闭。我看到有些人遇到了同样的问题并发布了同样的问题,但我仍然找不到解决方案。我检查了 this, and this ,and this,and that,但找不到解决方案。这是我下面的代码,用于 window 的相应 class:
public class CommunicationConfigWindow extends Window
{
private static CommunicationConfigWindow INSTANCE;
private final Accordion catAccordion = new Accordion();
private final VerticalLayout layout = new VerticalLayout();
private final HorizontalLayout toolbar = new HorizontalLayout();
private final Button applyButton = new Button( "Save&Close" );
private final Button cancelButton = new Button( "Cancel" );
private CommunicationConfigWindow( )
{
this.toolbar.setDefaultComponentAlignment( Alignment.MIDDLE_CENTER );
this.applyButton.setSizeFull();
this.cancelButton.addClickListener( e -> {
UI.getCurrent().removeWindow( this );
this.close();
} );
this.applyButton.addStyleName( ValoTheme.BUTTON_FRIENDLY );
this.cancelButton.addStyleName( ValoTheme.BUTTON_DANGER );
this.cancelButton.setSizeFull();
this.toolbar.addComponents( this.cancelButton, this.applyButton );
this.toolbar.setSizeFull();
this.catAccordion.addTab( new GeneralCatLayer( CatVersionEnum.CAT21 ), "CAT 21" );
this.catAccordion.addTab( new GeneralCatLayer( CatVersionEnum.CAT23 ), "CAT 23" );
this.catAccordion.addTab( new GeneralCatLayer( CatVersionEnum.CAT247 ), "CAT 247" );
this.layout.addComponents( this.catAccordion, this.toolbar );
this.setContent( this.layout );
}
public static CommunicationConfigWindow getINSTANCE()
{
if ( CommunicationConfigWindow.INSTANCE == null )
{
CommunicationConfigWindow.INSTANCE = new CommunicationConfigWindow();
}
return CommunicationConfigWindow.INSTANCE;
}
}
This is before I click on cancel. This is after I click on cancel.
我确实从 Display Settings Button
弹出这个 window
。发生的事情是:
- 我单击“显示设置”按钮,window 弹出。
- 之前 我点击取消,我点击显示设置按钮,它没有创建一个新的 window 因为它是单例。
- 我点击取消并再次点击显示设置按钮,旧的乱七八糟的按钮留在那里并创建了一个新的 window。
我基本上希望 window 在我单击取消或关闭按钮时消失,但它只是 not.Why?
提前致谢。
可能是你的单例问题。你真的需要单例 window ?
如果您只想添加一个 window 单击按钮。您可以尝试进行一些验证,例如
Window yourWindow = new Window();
if (UI.getCurrent().getWindows().contains(yourWindow)) {
getUI().addWindow(yourWindow);
}
覆盖 window class
中的等号我没有改变任何东西,花了 2 个小时后,它开始工作了,尽管我没有改变任何东西,我也不知道为什么。