我有一个有几行的表。当用户点击某行时,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个选项卡等。
导致这种情况的原因是什么?
答案 0 :(得分: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");
}
});