Java Can';t显示GWT数据网格
所以我花了很长时间用GWT创建一个数据网格。我已经根据GWT的文档创建了我的表,并添加了数据,但我根本无法让它或数据网格本身显示出来。我错过了什么?我觉得这件事让我毛骨悚然。我觉得打一个aysnc电话可能是个问题,但我没有收到任何错误。当我编译并执行这部分代码时,屏幕上没有显示任何内容,数据网格应该位于dock上的区域是空的。我是不是忘记了一些琐碎的事情Java Can';t显示GWT数据网格,java,gwt,datagrid,Java,Gwt,Datagrid,所以我花了很长时间用GWT创建一个数据网格。我已经根据GWT的文档创建了我的表,并添加了数据,但我根本无法让它或数据网格本身显示出来。我错过了什么?我觉得这件事让我毛骨悚然。我觉得打一个aysnc电话可能是个问题,但我没有收到任何错误。当我编译并执行这部分代码时,屏幕上没有显示任何内容,数据网格应该位于dock上的区域是空的。我是不是忘记了一些琐碎的事情 static int orderID = 1001; private static List<Order
static int orderID = 1001;
private static List<OrderLine> orderLineList = new ArrayList<OrderLine>();
final DataGrid<OrderLine> dgOrder = new DataGrid<OrderLine>();
dgOrder.setWidth("100%");
//set columns
TextColumn<OrderLine> orderLineIdColumn = new TextColumn<OrderLine>(){
@Override
public String getValue(OrderLine object) {
return Integer.toString(object.getOrderLineID());
}
};
dgOrder.addColumn(orderLineIdColumn, "OrderLine ID");
TextColumn<OrderLine> productColumn = new TextColumn<OrderLine>(){
@Override
public String getValue(OrderLine object) {
return getProductName(object.getProductNumber());
}
};
dgOrder.addColumn(productColumn, "Product");
TextColumn<OrderLine> quantityColumn = new TextColumn<OrderLine>(){
@Override
public String getValue(OrderLine object) {
return Integer.toString(object.getQuantity());
}
};
dgOrder.addColumn(quantityColumn, "Quantity");
// add data to datagrid
Ioma.dataservice.getOrderLines(orderID, new AsyncCallback<ArrayList<OrderLine>>(){
@Override
public void onFailure(Throwable caught) {// TODO Auto-generated method stub
System.out.println("error in retrieving GP.getOrderLines" + caught.toString());
}
@Override
public void onSuccess(ArrayList<OrderLine> result) {
// TODO Auto-generated method stub
//yes i realize I could also set it to "result" but I use the result in other places as well, I have also tried setting it to result with no success
orderLineList = result;
dgOrder.setRowData(0, orderLineList);
}
});
//add datagrid to the dock
dock.add(dgOrder, DockPanel.EAST);
//add dock to mainPanel
return dock;
static int orderID=1001;
private static List orderLineList=new ArrayList();
最终数据网格dgOrder=新数据网格();
dgOrder.setWidth(“100%”);
//设置列
TextColumn orderLineIdColumn=newtextcolumn(){
@凌驾
公共字符串getValue(OrderLine对象){
返回Integer.toString(object.getOrderLineID());
}
};
addColumn(orderLineIdColumn,“orderlineid”);
TextColumn productColumn=新的TextColumn(){
@凌驾
公共字符串getValue(OrderLine对象){
返回getProductName(object.getProductNumber());
}
};
dgOrder.addColumn(productColumn,“产品”);
TextColumn quantityColumn=新的TextColumn(){
@凌驾
公共字符串getValue(OrderLine对象){
返回Integer.toString(object.getQuantity());
}
};
dgOrder.addColumn(quantityColumn,“数量”);
//向datagrid添加数据
Ioma.dataservice.getOrderLines(orderID,新的AsyncCallback(){
@凌驾
public void onFailure(可丢弃捕获){//TODO自动生成的方法存根
System.out.println(“检索GP.getOrderLines时出错”+catch.toString());
}
@凌驾
成功时公共无效(ArrayList结果){
//TODO自动生成的方法存根
//是的,我意识到我也可以将其设置为“结果”,但我也在其他地方使用该结果,我也尝试将其设置为结果,但没有成功
orderLineList=结果;
dgOrder.setRowData(0,orderLineList);
}
});
//将datagrid添加到dock
dock.add(dgOrder,DockPanel.EAST);
//将驳接添加到主面板
返回码头;
原来我的问题是我的声明
final DataGrid<OrderLine> dgOrder = new DataGrid<OrderLine>();
final DataGrid dgOrder=new DataGrid();
应该是
final CellTable<OrderLine> dgOrder = new CellTable<OrderLine>();
final CellTable dgOrder=new CellTable();
我不知道为什么会这样,但确实如此。我现在可以看到我的桌子了。我想知道,您不应该显式调用datagrid的实例吗?当您使用时,您需要给它一个显式的大小。因为你不需要,所以这就是为什么它有效
当您使用DataGrid
时,它存在,但高度和宽度均为0
。因此,您需要显式设置大小:
DataGrid=newdatagrid;
网格设置宽度(“500px”);
网格设置高度(“600px”);
dock.add(dgOrder,DockPanel.EAST);
或者,您可以将网格放在一个小部件中。因此,在您的情况下,我相信您可以使用a,而不是您似乎正在使用的a。我有一个笑脸。尝试将datagrid放在实现ProvidesResize接口的面板中,如SimpleLayoutPanel。在我的例子中,它也有助于设置SimpleLayoutPanel的大小。我认为CellTables和DataGrids有不同的方法来确定它们的大小。数据网格更加挑剔,在某些情况下,如果没有解决办法,数据网格将无法工作。例如:以上代码所做的就是调用celltable。Datagrid是一个不同(更好)的小部件。它没有显示的可能原因是您没有使用正确的包含面板(必须支持调整大小)。