Я пытаюсь воспроизвести поведение ячейки электронной таблицы, используя GWT. Мне удалось создать составной виджет под названием «Ячейка», который по умолчанию является виджетом «Метка». Когда пользователь нажимает на этот виджет, он становится виджетом «TextBox». В случае размытия виджет снова становится виджетом «Метка».
Мой вопрос касается эффективности и времени рендеринга. Вероятно, было бы проще всего сделать мою «Ячейку» «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;
}
}
...
При наличии onBlurEvent в TextBox или при событии onClick в Label вызывается метод switchMode (). Критика кода приветствуется.
Было бы разумнее вместо этого включать TextBox и Label в качестве личных переменных класса Cell, а затем просто добавлять или удалять соответствующий объект по мере необходимости?