0

我正在寻找创建一个垂直增长的文本区域,在那里我仍然可以看到文本的第一行。

目前我正在尝试使用这个:

public class GrowableTextArea extends TextArea {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    int initialRowSize = 1;

    int fixedColSize = 40;

    int currentRowSize = initialRowSize;

    float temp = 1.0f;

    String inputValue;

    public GrowableTextArea(String id) {

        super(id);

        setModel(new PropertyModel(this, inputValue));

        setOutputMarkupId(true);

        add(new GrowableBehavior("onkeyup"));

    }

    /***
     * Set the rows here. So that every time component is rendered,
     * 
     * rows value is updated.
     **/

    @Override
    public void onComponentTag(ComponentTag tag) {

        super.onComponentTag(tag);

        tag.put("rows", currentRowSize);

        tag.put("cols", fixedColSize);

    }

    /*** Getters and setters ***/

    public int getCurrentRowSize() {

        return currentRowSize;

    }

    public void setCurrentRowSize(int currentRowSize) {

        this.currentRowSize = currentRowSize;

    }

    public String getInputValue() {

        return inputValue;

    }

    public void setInputValue(String inputValue) {

        this.inputValue = inputValue;

    }


    private class GrowableBehavior extends AjaxFormComponentUpdatingBehavior

    {

        /***
         * Tell it to fire the onkeyup event every 1/2 sec.
         **/

        public GrowableBehavior(String event) {

            super(event);

            setThrottleDelay(Duration.milliseconds(500));

        }

        /***
         * First the model is updated and then
         * 
         * length is checked to see the
         * 
         * whether rowcount should be incremented
         **/

        @Override
        protected void onUpdate(AjaxRequestTarget target) {

            Component comp = getComponent();

            TextArea textarea = (TextArea) comp;

            String value = (String) textarea.getConvertedInput();

            if (value != null) {

                int currentLength = value.length();

                float f = (float) currentLength / fixedColSize;

                if (f > temp) {
                    currentRowSize++;

                    temp = temp + 1;

                    target.add(comp);
                }

            }

        }
    }

    public void setThrottleDelay(Duration milliseconds) {
        // TODO Auto-generated method stub

    }

}

我的输出只是一个普通的文本区域,类似于堆栈溢出文本区域。这里有什么问题?

4

1 回答 1

0

您可以像这样使用 jQuery 插件:http ://www.jacklmoore.com/autosize/

于 2013-10-17T12:36:13.623 回答