首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >列中的TextArea

列中的TextArea
EN

Stack Overflow用户
提问于 2011-11-10 13:15:45
回答 4查看 3K关注 0票数 0

我在过去曾涉足过GWT,知道的仅仅是烧了自己。我目前所受的伤害可以描述如下:

  1. 我有CellTable。这包含了许多列和TextColumns。TextColumns包含来自报表对象的变量、列呈现单选按钮、复选框等。
  2. I要插入另一列,它将为每个表行提供一个TextArea,用户可以在其中输入一些文本。
  3. My的问题是,我无法知道如何创建TextArea。

有人能给我一个代码片段让我开始吗?

EN

Stack Overflow用户

发布于 2012-02-07 16:09:03

我已经按照GWT附带的TextInputCell建模了我的TextInputCell。它基本上是相同的代码,只不过模板信息是特定于文本区域的(您可以复制/粘贴这个类,它是完全功能的):

代码语言:javascript
运行
复制
package com.xxx.scorecard.client.view.cell;

import com.google.gwt.cell.client.AbstractCell;
import com.google.gwt.cell.client.AbstractInputCell;
import com.google.gwt.cell.client.ValueUpdater;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.InputElement;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.safehtml.client.SafeHtmlTemplates;
import com.google.gwt.safehtml.client.SafeHtmlTemplates.Template;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;

/**
 * An {@link AbstractCell} used to render a text input.
 */
public class TextAreaInputCell extends AbstractInputCell<String, TextAreaInputCell.ViewData> {

    interface Template extends SafeHtmlTemplates {
        @Template("<textarea type=\"text\" cols=\"30\" rows=\"5\" tabindex=\"-1\">{0}</textarea>")
        SafeHtml input(String value);
    }

    /**
     * The {@code ViewData} for this cell.
     */
    public static class ViewData {
        /**
         * The last value that was updated.
         */
        private String lastValue;

        /**
         * The current value.
         */
        private String curValue;

        /**
         * Construct a ViewData instance containing a given value.
         * 
         * @param value
         *            a String value
         */
        public ViewData(String value) {
            this.lastValue = value;
            this.curValue = value;
        }

        /**
         * Return true if the last and current values of this ViewData object
         * are equal to those of the other object.
         */
        @Override
        public boolean equals(Object other) {
            if (!(other instanceof ViewData)) {
                return false;
            }
            ViewData vd = (ViewData) other;
            return equalsOrNull(lastValue, vd.lastValue) && equalsOrNull(curValue, vd.curValue);
        }

        /**
         * Return the current value of the input element.
         * 
         * @return the current value String
         * @see #setCurrentValue(String)
         */
        public String getCurrentValue() {
            return curValue;
        }

        /**
         * Return the last value sent to the {@link ValueUpdater}.
         * 
         * @return the last value String
         * @see #setLastValue(String)
         */
        public String getLastValue() {
            return lastValue;
        }

        /**
         * Return a hash code based on the last and current values.
         */
        @Override
        public int hashCode() {
            return (lastValue + "_*!@HASH_SEPARATOR@!*_" + curValue).hashCode();
        }

        /**
         * Set the current value.
         * 
         * @param curValue
         *            the current value
         * @see #getCurrentValue()
         */
        protected void setCurrentValue(String curValue) {
            this.curValue = curValue;
        }

        /**
         * Set the last value.
         * 
         * @param lastValue
         *            the last value
         * @see #getLastValue()
         */
        protected void setLastValue(String lastValue) {
            this.lastValue = lastValue;
        }

        private boolean equalsOrNull(Object a, Object b) {
            return (a != null) ? a.equals(b) : ((b == null) ? true : false);
        }
    }

    private static Template template;

    /**
     * Constructs a TextInputCell that renders its text without HTML markup.
     */
    public TextAreaInputCell() {
        super("change", "keyup");
        if (template == null) {
            template = GWT.create(Template.class);
        }
    }

    @Override
    public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event,
            ValueUpdater<String> valueUpdater) {
        super.onBrowserEvent(context, parent, value, event, valueUpdater);

        // Ignore events that don't target the input.
        InputElement input = getInputElement(parent);
        Element target = event.getEventTarget().cast();
        if (!input.isOrHasChild(target)) {
            return;
        }

        String eventType = event.getType();
        Object key = context.getKey();
        if ("change".equals(eventType)) {
            finishEditing(parent, value, key, valueUpdater);
        } else if ("keyup".equals(eventType)) {
            // Record keys as they are typed.
            ViewData vd = getViewData(key);
            if (vd == null) {
                vd = new ViewData(value);
                setViewData(key, vd);
            }
            vd.setCurrentValue(input.getValue());
        }
    }

    @Override
    public void render(Context context, String value, SafeHtmlBuilder sb) {
        // Get the view data.
        Object key = context.getKey();
        ViewData viewData = getViewData(key);
        if (viewData != null && viewData.getCurrentValue().equals(value)) {
            clearViewData(key);
            viewData = null;
        }

        String s = (viewData != null) ? viewData.getCurrentValue() : value;
        if (s != null) {
            sb.append(template.input(s));
        } else {
            sb.appendHtmlConstant("<input type=\"text\" tabindex=\"-1\"></input>");
        }
    }

    @Override
    protected void finishEditing(Element parent, String value, Object key, ValueUpdater<String> valueUpdater) {
        String newValue = getInputElement(parent).getValue();

        // Get the view data.
        ViewData vd = getViewData(key);
        if (vd == null) {
            vd = new ViewData(value);
            setViewData(key, vd);
        }
        vd.setCurrentValue(newValue);

        // Fire the value updater if the value has changed.
        if (valueUpdater != null && !vd.getCurrentValue().equals(vd.getLastValue())) {
            vd.setLastValue(newValue);
            valueUpdater.update(newValue);
        }

        // Blur the element.
        super.finishEditing(parent, newValue, key, valueUpdater);
    }

    @Override
    protected InputElement getInputElement(Element parent) {
        return super.getInputElement(parent).<InputElement> cast();
    }
}

下面是你使用手机的方法:

代码语言:javascript
运行
复制
    Column<ScorecardEntryDTO, String> commentColumn = new Column<ScorecardEntryDTO, String>(new TextAreaInputCell()) {
        @Override
        public String getValue(ScorecardEntryDTO object) {
            return object.getComment();
        }
    };
票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8080052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档