Re: Textarea KeyUpHandler not working

100 views
Skip to first unread message

marco

unread,
Nov 28, 2012, 7:40:18 AM11/28/12
to google-we...@googlegroups.com
Ok I fixed it, with the following changes

-public class ValidatableTextarea extends ComplexPanel
+public class ValidatableTextarea extends FlowPanel
-   private FlowPanel rootPanel;
    protected TextArea input;
    private Label errorLabel;

    @UiConstructor 
    public ValidatableTextarea() { 
        input = new TextArea(); 
-       rootPanel = new FlowPanel(); 
-       rootPanel.add(input); 
+       add(input)

-       setElement(rootPanel.getElement()); 
    }
    ...
    public void setText(String text) { 
        input.setText(String Text); 
    }

    ...
    public void addKeyUpHandler(KeyUpHandler keyUpHandler) { 
        input.addKeyUpHandler(keyUpHandler); 
    }

Don't know why but it's working now.

Cheers

Am Mittwoch, 28. November 2012 08:34:43 UTC+1 schrieb marco:
Hi there,

I'm trying to implement a counter for a textarea. Something like this is working for me

final TextArea textArea = new TextArea();
final Label counter = new Label("Number of characters: 0");
...
    private void addlistener() {
        textArea.addKeyUpHandler(new KeyUpHandler() {
            public void onKeyUp(KeyUpEvent keyUpEvent) {
              counter.setText(" Number of characters:"+textArea.getText().length());
            }
        });

In my project the TextArea is enhanced e.g. for displaying validation errors.

public class ValidatableTextarea extends ComplexPanel
    private FlowPanel rootPanel;
    protected TextArea input;
    private Label errorLabel;

    @UiConstructor
    public ValidatableTextarea() { 
        input = new TextArea(); 
        rootPanel = new FlowPanel(); 
        rootPanel.add(input); 
        setElement(rootPanel.getElement()); 
    }
    ...
    public void setText(String text) { 
        input.setText(String Text); 
    }

    ...
    public void addKeyUpHandler(KeyUpHandler keyUpHandler) { 
        input.addKeyUpHandler(keyUpHandler); 
    }


My Presenter is calling ValidatableTextarea.addKeyUpHandler onBind but the keyhandler seems not to be added. The same thing happens when I call ValidatableTextarea.setText
My Presenter is a dialog, so when I call those functions in Presenter.open at least ValidatableTextarea.setText is working and the given text is displayed, but there is still no keyUpHandler working.

So is there any magic working I don't see? Any event I can listen to be sure that my ValidatableTextarea is ready to accept my keyUpHandler? Or is my given Handler somehow overwritten?

Thanks in advance,
Marco

Thomas Broyer

unread,
Nov 28, 2012, 8:45:51 AM11/28/12
to google-we...@googlegroups.com


On Wednesday, November 28, 2012 1:40:18 PM UTC+1, marco wrote:
Ok I fixed it, with the following changes

-public class ValidatableTextarea extends ComplexPanel
+public class ValidatableTextarea extends FlowPanel
-   private FlowPanel rootPanel;
    protected TextArea input;
    private Label errorLabel;

    @UiConstructor 
    public ValidatableTextarea() { 
        input = new TextArea(); 
-       rootPanel = new FlowPanel(); 
-       rootPanel.add(input); 
+       add(input)

-       setElement(rootPanel.getElement()); 
    }
    ...
    public void setText(String text) { 
        input.setText(String Text); 
    }

    ...
    public void addKeyUpHandler(KeyUpHandler keyUpHandler) { 
        input.addKeyUpHandler(keyUpHandler); 
    }

Don't know why but it's working now.

I know why: setElement() is only meant to be used when you create your own Widget, not when you extend an existing one. The root of your problem was actually using rootPanel;getElement() as the element for another widget, yet adding widgets to rootPanel (which is never attached to the DOM: its element is "physically" attached, by way of the ValidatableTextArea, but the FlowPanel itself is not "logically" attached.

Now, instead of extending FlowPanel, you should extend Composite instead, and use a FlowPanel with setWidget (more or less reverting to your previous code, fixing it: ComplexPanel→Composite, setElement→setWidget)

marco

unread,
Nov 29, 2012, 5:46:33 AM11/29/12
to google-we...@googlegroups.com
Hi Thomas,

thanks for your explanation. I had that setElement(rootPanel.getElement()) thing in my mind, but I didn't really got what it does until your explanation. Now it makes much sense to me what happened.

Cheers,
Marco
Reply all
Reply to author
Forward
0 new messages