我正在编写一个测试来查看事件处理程序应该如何工作但似乎我在这里做错了,因为我看不到添加的Widget到flextable :(
这是我的代码段
复合A:
B b=new B();
Button addItemButton = new Button("+");
addItemButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
Window.alert("Hello world!");
b.addItem(itemTable);
}
});
复合B:
public void addItem(FlexTable itemTable)
{
itemTable.add(new C());
}
复合C:
...
Button removeRow=new Button();
removeButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
itemTable.removeRow(?);
}
});
我的意思是当我在默认的Internet浏览器中将其作为GWT应用程序运行时,没有任何内容添加到itemTable。如何刷新ItemTable或其他东西以查看其添加或删除的行?
赞赏任何有用的评论
答案 0 :(得分:1)
您需要在运行时获取并使用当前行计数
itemTable.setWidget(itemTable.getRowCount(),0,new Label("Hello world"));
答案 1 :(得分:1)
您需要更仔细地查看GWT Stocks示例。这是实际添加行的代码部分:
// Add the stock to the table.
int row = stocksFlexTable.getRowCount();
stocks.add(symbol);
stocksFlexTable.setText(row, 0, symbol);
对stocksFlexTable.setText()
的调用是在表中创建行并设置文本的内容。因此,B
和C
的代码应该更像这样:
//In Composite B
public void addItem(FlexTable itemTable) {
int row = itemTable.getRowCount();
itemTable.setText(row, 0, symbol);
itemTable.add(new C(row));
}
//In Composite C, the constructor saves the int argument as the field 'row'
Button removeRow=new Button();
removeButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
itemTable.removeRow(C.this.row);
}
});
如果你只是想把一堆小部件叠加在一起(所以如果你不在表中创建多个列),你应该只使用VerticalPanel
。它的add()
方法可以满足您的期望。
答案 2 :(得分:0)
尝试使用setWidget方法。
public void addItem(FlexTable itemTable)
{
itemTable.setWidget(0,0,new Label("Hello world"));
}
setWidgets需要参数(row,col,Widget)。