gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:59:55 26 4
gpt4 key购买 nike

我有一个包含几行的表格。当用户点击一行时,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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com