Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GWT数据网格列_Java_Gwt_Datagrid_Uibinder - Fatal编程技术网

Java GWT数据网格列

Java GWT数据网格列,java,gwt,datagrid,uibinder,Java,Gwt,Datagrid,Uibinder,我有一个GWT项目,它将有几个数据网格。到目前为止,我已经实现了一个(使用ASyncDataProvider),它工作得很好。但我真的不喜欢所有凌乱的锅炉板代码来指定列。以下是一个示例: //some column Column<DataRecord, String> dataColumn = new Column<DataRecord, String>(new TextCell()) { public String getCellStyl

我有一个GWT项目,它将有几个数据网格。到目前为止,我已经实现了一个(使用
ASyncDataProvider
),它工作得很好。但我真的不喜欢所有凌乱的锅炉板代码来指定列。以下是一个示例:

    //some column
    Column<DataRecord, String> dataColumn = new Column<DataRecord, String>(new TextCell()) {
        public String getCellStyleNames(Context ctx, DataRecord record) {
            //some columns have a style based on the value, calculate style here
        }
        public String getValue(DataRecord record) {
            return record.getProperty();
        }
    };
    dataGrid.addColumn(dataColumn);
    dataGrid.setColumnWidth(dataColumn, 25, Unit.PX);
//某个列
Column dataColumn=新列(new TextCell()){
公共字符串GetCellStyleName(上下文ctx、数据记录){
//某些列具有基于值的样式,请在此处计算样式
}
公共字符串getValue(数据记录){
return record.getProperty();
}
};
dataGrid.addColumn(dataColumn);
dataGrid.setColumnWidth(dataColumn,25,Unit.PX);
有没有办法减少代码量?假设一个表有十几列,代码会变得非常乏味。网格本身由UiBinder呈现,但UiBinder似乎无法在DataGrid上指定列

我看了一下: 但这涉及到使用HTML表,但我不想失去DataGrid提供的所有功能,所以我不愿意走这条路


任何其他建议都将受到欢迎。

使用类MyColumn like

private class MyColumn extends Column<DataRecord, String>
{
  private String field;
  public MyColumn(String field)
  {
    super(new TextCell());
    this.field = field;
  }

  public String getValue(DateRecord rec)
  {
     if (this.field.equals("prop1")
         return rec.getProp1();
     else if (this.field.equals("prop2")
         return rec.getProp2();
     else
        return "ERROR";
  }
}  
丑陋,但有效。为了使它更好,您可以使用一些与GWT一起工作的反射工具包

dataGrid.addColumn(new MyColumn("prop1"));
dataGrid.addColumn(new MyColumn("prop2"));