Growable text area in wicket

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Growable text area in wicket

sean
'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

    }

}

But my output is a just a normal text area.