2016-08-12 95 views
2

我有一个表有几行。当一排ItemClickListener用户点击允许按钮:为什么Vaadin ClickListener在第一次点击时不会触发?

testCaseTable.addItemClickListener(new ItemClickListener() { 

    @Override 
    public void itemClick(ItemClickEvent event) { 

     groupForm.tcDetailsButton.setEnabled(true); 

     System.out.println("_________________"); 
     System.out.println("Item ID is: " + event.getItemId().toString()); 
     System.out.println("Item is: " + event.getItem().toString()); 
     System.out.println("Property ID is: " + event.getPropertyId().toString()); 
     System.out.println("_________________"); 
    } 
}); 

我第一次点击按钮,没有任何反应。第二次点击按钮时,它会正常启动并打开浏览器窗口。

tcDetailsButton.addClickListener(new Button.ClickListener() { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 3726094749730769327L; 

    @Override 
    public void buttonClick(ClickEvent event) { 
     BrowserWindowOpener opener = new BrowserWindowOpener(EvoltwebUI.class); 
     opener.setResource(new ExternalResource("google.com")); //url 
     opener.setWindowName("_blank"); 
     opener.extend(tcDetailsButton); 

    } 
}); 

看来,如果我点击我的表2行,然后按一下按钮,它会打开浏览器1个选项卡。如果我点击3行,然后点击按钮,它会打开2个浏览器标签,4行点击= 3个标签打开等。

什么可能导致此?

回答

1

我能够按照上述弗拉基米尔·Kordzik的建议,解决这个问题,而是,我将BrowserWindowOpener的声明和实例移动到类级别,并在点击监听器之前将组件扩展到了开瓶器:

级别声明和安装:

点击之前

public BrowserWindowOpener opener = new BrowserWindowOpener(EvoltwebUI.class);

扩展揭幕战:

opener.extend(tcDetailsButton);

点击监听器看起来像现在这样:

tcDetailsButton.addClickListener(new Button.ClickListener() { 

     /** 
     * 
     */ 
     private static final long serialVersionUID = 3726094749730769327L; 

     @Override 
     public void buttonClick(ClickEvent event) {    

      opener.setResource(new ExternalResource("google.com")); //url 
      opener.setWindowName("_blank");       

     } 
}); 
2

每当buttonClick(ClickEvent事件)被触发时,它会添加一个BrowserWindowOpener的新副本,它接收tcDetailsButton。但是,除了第一次,tcDetailsButton已经收到BrowserWindowOpener的前一个副本。每次点击都会重复这种情况,每次都会增加一倍的窗口数量。

我想,你应该buttonClick()法实施前初始化BrowserWindowOpener,像这样:

tcDetailsButton.addClickListener(new Button.ClickListener() { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 3726094749730769327L; 

    final BrowserWindowOpener opener = new BrowserWindowOpener(EvoltwebUI.class); 
    opener.extend(tcDetailsButton); 

    @Override 
    public void buttonClick(ClickEvent event) { 
     opener.setResource(new ExternalResource("google.com")); //url 
     opener.setWindowName("_blank"); 
    } 
}); 
+0

感谢您的答复。我试着改变我的代码,但它不会编译。 – PeachesToad

+0

您的评论引导我进行修复。我发布了一个新的答案。请参见。再次感谢。 – PeachesToad

+0

最后陈述缺失。这就是为什么它不编译。 – d2k2

相关问题