java - 为什么 Vaadin ClickListener 没有在第一次点击时触发?

标签 java vaadin

我有一个包含几行的表格。当用户点击一行时,ItemClickListener 启用一个按钮:

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 个选项卡,等等。

这可能是什么原因造成的?

最佳答案

每当触发 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");   
    }
});

关于java - 为什么 Vaadin ClickListener 没有在第一次点击时触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38925688/

相关文章:

Java 复数,3 类

java - Android 简单适配器在 ListView 中显示

java - 将大文件作为流发送到 process.getOutputStream

java - Vaadin 提供实时图表吗?

java - 从表迁移到网格 vaadin

java - 如何从文本文件中提取数字

java - 找不到网页 View ,没有这样的窗口: target window already closed

java - 如何在我的 vaadin 应用程序中添加面包屑?

css - 如何在整个 Vaadin 7 应用程序中设置自定义字体

icons - 如何在 Vaadin 流中包含自己的图标集合?