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