Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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 CellTable或类似产品_Java_Gwt - Fatal编程技术网

Java GWT CellTable或类似产品

Java GWT CellTable或类似产品,java,gwt,Java,Gwt,在GWT应用程序上工作,它需要类似CellTable的东西来显示和编辑数据。我在CellTable示例中没有看到的额外要求: 多个标题行。我并不真的需要这样的标题行,但每隔几行(4-10行)的数据我就会想要类似标题的东西(基本上解释了下一个“n”项是如何关联的) 基于某些数据(当前日期和对象中指定的日期),某些字段应该是不可编辑的。我已经找到了如何使列不可编辑的示例,但是如何将其映射回自定义渲染器中的实际数据?(即,对应于行的数据对象-应该很简单,但我遗漏了一些东西…) 我能用手机台做这个吗

在GWT应用程序上工作,它需要类似CellTable的东西来显示和编辑数据。我在CellTable示例中没有看到的额外要求:

  • 多个标题行。我并不真的需要这样的标题行,但每隔几行(4-10行)的数据我就会想要类似标题的东西(基本上解释了下一个“n”项是如何关联的)

  • 基于某些数据(当前日期和对象中指定的日期),某些字段应该是不可编辑的。我已经找到了如何使列不可编辑的示例,但是如何将其映射回自定义渲染器中的实际数据?(即,对应于行的数据对象-应该很简单,但我遗漏了一些东西…)

我能用手机台做这个吗?有没有更好的小部件我应该看看?我知道我可以在网格中完成所有工作,但手机桌看起来好多了

谢谢

答复 在下面托马斯·布罗耶的答案的基础上,我成功地将不可编辑的内容进行了扩展。我从未真正期望“标题行”很容易,所以编辑是主要部分

正如我在下面所评论的,我没有发现任何简单易懂的例子能够向我展示整个画面。我设法从几个不同的来源把它拼凑起来

如果有人有任何意见或我错过了一些明显的东西:让我知道

// Step 1: Create a cell (in this case based on text)
class MyEditTextCell extends EditTextCell {
    @Override
    public void render(com.google.gwt.cell.client.Cell.Context context,
            String value, SafeHtmlBuilder sb) 
    {
        bool editable = true;
        // TODO: What goes here?

        if (!editable) {
        sb.appendHtmlConstant("<div contentEditable='false' unselectable='true'>" + value + "</div>");
    }
    else {
            super.render(context, value, sb);
        }
    }
}

// It gets used to add a column to the table like this
final MyEditTextCell myCell = new MyTextCell();
Column<RowType, String> nmyCol = new Column<RowType, String>(myCell) {
    @Override
    public String getValue(RowType o) {
        return o.someMethod(); // This gets the particular row out of your column.
    }
};
table.addColumn(myCol, "Heading");
//步骤1:创建单元格(本例中基于文本)
类MyEditTextCell扩展了EditTextCell{
@凌驾
public void render(com.google.gwt.cell.client.cell.Context),
字符串值,安全HtmlBuilder sb)
{
bool=true;
//托多:这里有什么?
如果(!可编辑){
sb.附加HtmlConstant(“+value+”);
}
否则{
超级渲染(上下文、值、sb);
}
}
}
//它用于向表中添加一列,如下所示
最终MyEditTextCell myCell=新MyTextCell();
列nmyCol=新列(myCell){
@凌驾
公共字符串getValue(行类型o){
return o.someMethod();//这将从列中获取特定的行。
}
};
表.添加栏(麦可尔,“标题”);
因此,所有这些都很容易实现,但我仍然无法找出使用该行的方法。它与另一个处理密钥提供者的示例一起使用。KeyProvider提供了一个来自单元格的render()方法中获得的上下文和单元格所属行的链接。它通过一个索引(它只是一个对象)来实现这一点

因此,你最终会:

// Step 2: Cell can get the row and use it to decide how to draw.
class MyEditTextCell extends EditTextCell {
    @Override
    public void render(com.google.gwt.cell.client.Cell.Context context,
            String value, SafeHtmlBuilder sb) 
    {
        Object key = context.getKey();
        // What the key is is uo to you: if could be an Integer that indexes into
        // a collection of objects, it could be a key for a hashmap. I'm guessing
        // it could even be the real object itself (but I haven't tried that...)
        // e.g.
        boolean editable = true;
        int index = ((Integer)key).intValue();
        RowType row = myRowCollection.get(index);
        if (row != null) {
            if (/*some condition on the row*/) {
                editable = false;
            }
        }
        if (!editable) {
        sb.appendHtmlConstant("<div contentEditable='false' unselectable='true'>" + value + "</div>");
    }
    else {
            super.render(context, value, sb);
        }
    }
}

// Key provider links gets a unique id from the rows - I just used an in.
// This gets provided to the CellTable on creation
// e.g. CellTable tab = new CellTable(LEY_PROVIDER);
//
private static final ProvidesKey<RowType> KEY_PROVIDER = new ProvidesKey<RowType>() {
    public Object getKey(RowType item) {
        return Integer.valueOf(item.getId());
    }
};
//步骤2:单元格可以获取行并使用它来决定如何绘制。
类MyEditTextCell扩展了EditTextCell{
@凌驾
public void render(com.google.gwt.cell.client.cell.Context),
字符串值,安全HtmlBuilder sb)
{
Object key=context.getKey();
//关键是uo:if可以是一个索引到
//一组对象,它可能是hashmap的一个键。我猜
//它甚至可能是真实的对象本身(但我没有尝试过…)
//例如。
布尔可编辑=真;
int index=((整数)键).intValue();
RowType row=myRowCollection.get(索引);
如果(行!=null){
if(/*行上的某些条件*/){
可编辑=假;
}
}
如果(!可编辑){
sb.附加HtmlConstant(“+value+”);
}
否则{
超级渲染(上下文、值、sb);
}
}
}
//键提供程序链接从行中获取唯一id-我刚才在中使用了一个。
//这将在创建时提供给CellTable
//例如,CellTable选项卡=新的CellTable(LEY_提供者);
//
私有静态最终ProvidesKey\u PROVIDER=新ProvidesKey(){
公共对象getKey(行类型项){
返回Integer.valueOf(item.getId());
}
};
  • 多个标题行。我并不真的需要这样的标题行,但每隔几行(4-10行)的数据我就会想要类似标题的东西(基本上解释了下一个“n”项是如何关联的)
(又名分组行)
GWT 2.5(大约一个月后发布)将添加
CellTableBuilder
,允许您更改
CellTable
从其模型构建视图的方式。
您可以在这里看到一个示例(与您的用例不同:添加子行而不是分组行):
在您的例子中,棘手的部分是检测何时插入分组行

  • 基于某些数据(当前日期和对象中指定的日期),某些字段应该是不可编辑的。我已经找到了如何使列不可编辑的示例,但是如何将其映射回自定义渲染器中的实际数据?(即,对应于行的数据对象-应该很简单,但我遗漏了一些东西…)
最好使用一个自定义的
单元格
,该单元格接受一个行对象值(这样它就可以决定该单元格是否可编辑),但只显示/编辑该对象的字段/属性。
如果值是可编辑的,您应该能够将渲染和事件处理延迟到
TextInputCell
EditTextCell
,否则延迟到
TextCell

棘手的部分是,使列可编辑的条件是否取决于自身可编辑的属性。在这种情况下,您必须触发表的刷新(至少是修改的行),以便刷新有条件可编辑的列。
在这种情况下,我认为使用自定义的
单元格
会有更好的机会,它最初总是呈现相同的内容,但可以切换到可编辑模式(类似于
编辑文本单元格
);并在处理事件时进行该值的可编辑计算,并有条件地拒绝切换到编辑模式。

您应该可以从这里的
EditTextCell
复制/粘贴大量内容。

谢谢您的回答-稍后再试。GWT2.5示例看起来很简单