GWT电子表格单元格

问题描述:

我想重现使用GWT的电子表格单元格的行为。我能够制作一个名为“单元”的复合小部件,它默认为“标签”小部件。当用户点击这个小部件时,它变成了一个“TextBox”小部件。在模糊事件中,该小部件再次成为“标签”小部件。GWT电子表格单元格

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

这里是我的伪代码(因为我不是围绕一个IDE)...

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; 
    } 
} 

... 

当有对一个文本框或onBlurEvent当有对标签的onClick事件,开关模式()方法被调用。批评代码是受欢迎的。

将一个TextBox和Label包含为Cell类的私有变量,然后根据需要添加或删除相应的对象会更聪明吗?

我们遇到了类似的问题:高效显示类似excel的表格(很多行和列,每个单元格就地编辑)。

最终的解决方案是:将表格呈现为字符串:每个单元格都像文本一样呈现,全部通过innerHTML呈现。 当用户使用鼠标或键盘选择一个单元格时,特定隐藏的TextArea出现在所选单元格上(具有相同的大小),并将焦点赋予TextArea。 OnBlur - 输入的文本返回到单元格,并且TextArea再次隐藏。

我们不使用单元格的小部件。 TextArea仅适用于整个表格。

又见 “有效GWT:开发与谷歌Web工具包一个复杂的,高性能的应用程序” http://code.google.com/events/io/2009/sessions/EffectiveGwt.html

更简单的方法是将它们都添加到面板(不是simplePanel虽然),并使用setVisable方法来改变可见度。

+0

没想到的是,却是的,这可能会更好。我很高兴(无论是在我的代码和页面渲染),这将是最好的方法吗? – 2010-01-19 17:36:43

+0

您可以创建2个简单示例并使用速度跟踪器来监视它们。 – mrras 2010-01-19 18:18:26