我正在尝试使用 GWT 重现电子表格单元格的行为。我能够制作一个名为“Cell”的复合小部件,默认情况下它是一个“标签”小部件。当用户单击此小部件时,它会变成一个“文本框”小部件。在模糊事件中,小部件再次成为“标签”小部件。
我的问题涉及效率和渲染时间。将我的“Cell”设为“TextBox”并通过 CSS 改变用户的外观(根据他们是否正在输入数据)可能是最简单的。但是,我认为这会影响渲染时间,因此只要不需要输入,我就会恢复为“标签”小部件。然而,这种方法的问题在于,每次用户需要在“单元格”中输入任何内容时,我基本上都会创建一个新的文本框/标签。
这是我的伪代码(因为我没有使用 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;
}
}
...
当TextBox上有onBlurEvent或者Label上有onClick事件时,switchMode()方法就会被调用。欢迎批评代码。
将 TextBox 和 Label 作为 Cell 类的私有(private)变量,然后根据需要添加或删除相应的对象会不会更聪明?
最佳答案
我们遇到了类似的问题:类似 excel 的表格的高效显示(很多行和列,每个单元格都可以就地编辑)。
最终的解决方案是:将表格呈现为字符串:每个单元格都呈现为文本,全部通过 innerHTML 放置。 当用户使用鼠标或键盘选择一个单元格时,特殊的隐藏 TextArea 会出现在所选单元格上(具有相同的大小),并且焦点会移至 TextArea。 OnBlur - 输入的文本返回到单元格,TextArea 再次隐藏。
我们不为单元格使用小部件。 TextArea 对于整个表格来说只有一个。
另见 “Effective GWT:使用 Google Web Toolkit 开发复杂的高性能应用程序” http://code.google.com/events/io/2009/sessions/EffectiveGwt.html
关于java - GWT 电子表格单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2094469/