Java gwt应用程序中的复合单元
我正在尝试创建一个CompositeCell,它由一个TextCell和一个ButtonCell组成。我想将CompositeCell添加到列中,然后将该列添加到CellTable中。但是,我无法理解该列的实例应该是什么样的。特别是,我在以下代码中找不到其类型参数:Java gwt应用程序中的复合单元,java,gwt,cell,celltable,Java,Gwt,Cell,Celltable,我正在尝试创建一个CompositeCell,它由一个TextCell和一个ButtonCell组成。我想将CompositeCell添加到列中,然后将该列添加到CellTable中。但是,我无法理解该列的实例应该是什么样的。特别是,我在以下代码中找不到其类型参数: Column<FilterInfo, ?> compositeColumn = new Column<FilterInfo, ?>(createCompositeCell()) { @Override
Column<FilterInfo, ?> compositeColumn = new Column<FilterInfo, ?>(createCompositeCell()) {
@Override
public Object getValue(Object object) {
// TODO Auto-generated method stub
return null;
}};
Column compositeColumn=新列(createCompositeCell()){
@凌驾
公共对象getValue(对象对象){
//TODO自动生成的方法存根
返回null;
}};
创建自定义类FilterInfo的CompositeCell(有必要吗?)的方法是:
private CompositeCell createCompositeCell(){
HasCell filterName=新的HasCell(){
公共单元getCell(){
返回新的TextCell();
}
公共字段更新程序getFieldUpdater(){
//TODO自动生成的方法存根
返回null;
}
公共字符串getValue(FilterInfo对象){
返回object.getFilterName();
}};
HasCell filterButton=新的HasCell(){
公共单元getCell(){
返回新的ButtonCell();
}
公共字段更新程序getFieldUpdater(){
//TODO自动生成的方法存根
返回null;
}
公共字符串getValue(FilterInfo对象){
//TODO自动生成的方法存根
返回“…”;
}
};
列表单元格=新的ArrayList();
单元格。添加(过滤器名称);
单元格。添加(filterButton);
CompositeCell CompositeCell=新的CompositeCell(单元格);
返回复合池;
}
如果有任何迹象表明需要修改代码或其他建议以创建所需的CompositeCell并将其正确添加到CellTable中,我将不胜感激 如果您的
单元格表
包含过滤器信息列表
,而您的单元格
包含过滤器信息
,则使用标识列
是否必须使用复合单元格?对我来说,这似乎是一个很大的工作,它可能更容易创建自己的自定义单元
阅读上的文档我使用GXT XTemplate渲染文本单元格的文本,创建了一个compositecell(Checkboxcell+TextCell)。如果您想坚持使用纯GWT并用GWT替换其他GXT小部件,请使用模板
不要在这里过多地关注类型参数。 您的IDE太智能,会给您输入错误。它会抱怨“Raw Type.XXX
private Column<DTO, DTO> getButtonColumn() {
return new Column<DTO, DTO>(getButtonsCell()) {
@Override
public DTO getValue(DTO object) {
return object;
}
};
}
private CompositeCell getButtonsCell() {
HasCell<DTO,DTO> button1 = new AbstractActionButton<DTO>() {
@Override
public void execute(final DTO object) {
//Action on button click
}
@Override
public void render(Context context, DTO data, SafeHtmlBuilder sb) {
//
}
};
HasCell<DTO,DTO> button2 = new AbstractActionButton<DTO>(){
//Complete me ...
}
List<HasCell<DTO, ?>> cells = new LinkedList<>();
cells.add(button1);
cells.add(button2);
CompositeCell<DTO> compositeCell = new CompositeCell<>(cells);
return compositeCell;
}
public abstract class AbstractActionButton<DTO> implements HasCell<DTO, DTO> {
@Override
public Cell<DTO> getCell() {
return new ActionCell<DTO>("Button title", new ActionCell.Delegate<DTO>() {
@Override
public void execute(DTO object) {
AbstractActionButton.this.execute(object);
}
}) {
@Override
public void render(Context context, DTO data, SafeHtmlBuilder sb) {
AbstractActionButton.this.render(context, data, sb);
}
};
}
//Replaced by delegate but still need to be overriden
@Override
public FieldUpdater<DTO, DTO> getFieldUpdater() {
return null;
}
@Override
public DTO getValue(DTO object) {
return object;
}
/**
* You can override this method to render your button differently. Not mandatory
* @param context
* @param data
* @param sb
*/
public abstract void render(Context context, DTO data, SafeHtmlBuilder sb);
/**
* Called when the button is clicked
* @param object
*/
public abstract void execute(DTO object);
}
私有列getButtonColumn(){
返回新列(getButtonsCell()){
@凌驾
公共DTO getValue(DTO对象){
返回对象;
}
};
}
私有CompositeCell getButtonsCell(){
HasCell button1=新的AbstractActionButton(){
@凌驾
公共void执行(最终DTO对象){
//单击按钮时的操作
}
@凌驾
公共void呈现(上下文上下文、DTO数据、安全HtmlBuilder sb){
//
}
};
HasCell button2=新建AbstractActionButton(){
//完成我。。。
}
列表单元格=新建LinkedList();
单元格。添加(按钮1);
单元格。添加(按钮2);
CompositeCell CompositeCell=新的CompositeCell(单元格);
返回复合池;
}
公共抽象类AbstractActionButton实现了HasCell{
@凌驾
公共单元getCell(){
返回新的ActionCell(“按钮标题”,new ActionCell.Delegate(){
@凌驾
公共void执行(DTO对象){
AbstractActionButton.this.execute(对象);
}
}) {
@凌驾
公共void呈现(上下文上下文、DTO数据、安全HtmlBuilder sb){
AbstractActionButton.this.render(上下文、数据、sb);
}
};
}
//已替换为委托,但仍需要重写
@凌驾
公共字段更新程序getFieldUpdater(){
返回null;
}
@凌驾
公共DTO getValue(DTO对象){
返回对象;
}
/**
*您可以重写此方法以不同方式呈现按钮。这不是强制性的
*@param上下文
*@param数据
*@param某人
*/
公共抽象void呈现(上下文、DTO数据、安全HTMLBuilder sb);
/**
*单击按钮时调用
*@param对象
*/
公共抽象无效执行(DTO对象);
}
我试过这个,可以用自定义单元格完成。好办法。
private Column<DTO, DTO> getButtonColumn() {
return new Column<DTO, DTO>(getButtonsCell()) {
@Override
public DTO getValue(DTO object) {
return object;
}
};
}
private CompositeCell getButtonsCell() {
HasCell<DTO,DTO> button1 = new AbstractActionButton<DTO>() {
@Override
public void execute(final DTO object) {
//Action on button click
}
@Override
public void render(Context context, DTO data, SafeHtmlBuilder sb) {
//
}
};
HasCell<DTO,DTO> button2 = new AbstractActionButton<DTO>(){
//Complete me ...
}
List<HasCell<DTO, ?>> cells = new LinkedList<>();
cells.add(button1);
cells.add(button2);
CompositeCell<DTO> compositeCell = new CompositeCell<>(cells);
return compositeCell;
}
public abstract class AbstractActionButton<DTO> implements HasCell<DTO, DTO> {
@Override
public Cell<DTO> getCell() {
return new ActionCell<DTO>("Button title", new ActionCell.Delegate<DTO>() {
@Override
public void execute(DTO object) {
AbstractActionButton.this.execute(object);
}
}) {
@Override
public void render(Context context, DTO data, SafeHtmlBuilder sb) {
AbstractActionButton.this.render(context, data, sb);
}
};
}
//Replaced by delegate but still need to be overriden
@Override
public FieldUpdater<DTO, DTO> getFieldUpdater() {
return null;
}
@Override
public DTO getValue(DTO object) {
return object;
}
/**
* You can override this method to render your button differently. Not mandatory
* @param context
* @param data
* @param sb
*/
public abstract void render(Context context, DTO data, SafeHtmlBuilder sb);
/**
* Called when the button is clicked
* @param object
*/
public abstract void execute(DTO object);
}