本文介绍了检票口中的可增长文本区域的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望创建一个垂直增长的文本区域,在那里我仍然可以看到文本的第一行.

I'm looking to create a text area that grows vertically where I can still see the first line of the text.

目前我正在尝试使用它:

Currently I'm trying to use this:

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

    }

}

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

My output is a just a normal text area that similar to the stack overflow text area. What is wrong here?

推荐答案

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

You can use a jQuery plugin fir this like this: http://www.jacklmoore.com/autosize/

这篇关于检票口中的可增长文本区域的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-30 09:25