GWTを使用してスプレッドシートセルの動作を再現しようとしています。デフォルトで「ラベル」ウィジェットである「セル」と呼ばれる複合ウィジェットを作成することができました。ユーザーがこのウィジェットをクリックすると、「TextBox」ウィジェットになります。ぼかしイベントでは、ウィジェットは再び「ラベル」ウィジェットになります。
私の質問は、効率とレンダリング時間に関するものです。私の「セル」を「テキストボックス」にして、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;
}
}
...
TextBoxにonBlurEventがある場合、またはLabelにonClickイベントがある場合、switchMode()メソッドが呼び出されます。コードの批評は大歓迎です。
代わりに、Cellクラスのプライベート変数としてTextBoxとLabelを含め、必要に応じて対応するオブジェクトを追加または削除する方が賢明でしょうか。