java - GWT 电子表格单元格

标签 java gwt cell composite

我正在尝试使用 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/

相关文章:

java - Spring Boot 未注入(inject)具有 Web 感知范围的 Bean

dom - 单元格的有效 GWT DOM/消费事件的列表是什么?

swift - cell.imageView!.frame 尺寸变化。 swift

ios - 是否可以在不创建自定义单元格类的情况下更改单元格图像?

java - jtable多单元格选择

Java - 从文件中输出文本作为键盘模拟

java - 如何使用 JDBC 在 ListView 或 TableView 中显示来自 SQL Server 的数据

java - 在 libgdx 中部署到 Web 时替换 isInstance() 方法

java - GWT [错误] 重新绑定(bind)结果 'com.viktor.MyClassJSO' 不能是 JSO

java - GAE,JDO : working with entities loaded from cache