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
Java GWT电子表格单元_Java_Gwt_Cell_Composite - Fatal编程技术网

Java GWT电子表格单元

Java GWT电子表格单元,java,gwt,cell,composite,Java,Gwt,Cell,Composite,我试图使用GWT重现电子表格单元格的行为。我能够制作一个名为“Cell”的复合小部件,默认情况下它是一个“Label”小部件。当用户单击此小部件时,它将成为“文本框”小部件。在模糊事件中,小部件再次成为“标签”小部件 我的问题涉及效率和渲染时间。可能最简单的方法是将我的“单元格”变成“文本框”,并通过CSS(根据用户是否输入数据)更改用户的外观。然而,我认为这会影响渲染时间,所以每当不需要输入时,我都会返回到“标签”小部件。然而,这种方法的问题在于,每次用户需要在“单元格”中输入任何内容时,我基

我试图使用GWT重现电子表格单元格的行为。我能够制作一个名为“Cell”的复合小部件,默认情况下它是一个“Label”小部件。当用户单击此小部件时,它将成为“文本框”小部件。在模糊事件中,小部件再次成为“标签”小部件

我的问题涉及效率和渲染时间。可能最简单的方法是将我的“单元格”变成“文本框”,并通过CSS(根据用户是否输入数据)更改用户的外观。然而,我认为这会影响渲染时间,所以每当不需要输入时,我都会返回到“标签”小部件。然而,这种方法的问题在于,每次用户需要在“单元格”中输入任何内容时,我基本上都会创建一个新的文本框/标签

这是我的伪代码(因为我不熟悉IDE)

当文本框上有onBlurEvent或标签上有onClick事件时,将调用switchMode()方法。欢迎批评代码


将文本框和标签作为Cell类的私有变量,然后根据需要添加或删除相应的对象,这会更明智吗?

更简单的方法是将它们都添加到面板中(而不是
simplePanel
),并使用
setVisable
方法更改可视性。

我们遇到了类似的问题:高效地显示类似excel的表格(许多行和列,每个单元格都在适当位置可编辑)

最终的解决方案是:将表呈现为字符串:每个单元格都呈现为文本,全部通过innerHTML放置。 当用户用鼠标或键盘选择一个单元格时,所选单元格上会出现特殊的隐藏文本区域(大小相同),焦点会指向文本区域。OnBlur-输入的文本返回单元格,文本区域再次隐藏

我们对单元格不使用小部件。TextArea是整个表中唯一的一个

另见 “高效GWT:使用Google Web Toolkit开发复杂、高性能的应用程序”

我没有想到这一点,但是的,那可能会更好。我对高效(无论是在我的代码中还是在页面呈现中)感到好奇,哪种方法是最好的?您可以创建两个简单的示例,并使用speed Tracer来监视它们。
public class Cell extends Composite {

private SimplePanel sp;

public Cell() {
    Label l = new Label("");
    sp.add(l);
}

private void switchMode() {
    Widget w = sp.getWidget();
    if (w instanceof Label) {
        // we have a Label, change it to a TextBox
        String text = ((Label) w).getText();
        sp.remove(w);
        sp.add(new TextBox(text));
        // force garbage collection
        w = null;
    } else {
        // we have a TextBox, change it to a Label
        String text = ((TextBox) w).getText();
        sp.remove(w);
        sp.add(new Label(text));
        // force garbage collection
        w = null;
    }
}

...