Textfield change key typed to uppercase

As the title said, I’m trying to convert every key typed in textfield to upper case using keypress handler.
I used extension to achieve this. See example code below:

import com.google.gwt.event.dom.client.*;
import com.vaadin.client.*;
import com.vaadin.client.ui.*;
import com.vaadin.client.extensions.*;
import com.vaadin.shared.ui.*;

public class TextFieldUpCaseConnector extends AbstractExtensionConnector {

    protected void extend(ServerConnector target) {
        final VTextField tf = (VTextField) ((ComponentConnector) target).getWidget();

        tf.addKeyPressHandler(new KeyPressHandler() {

            public void onKeyPress(KeyPressEvent event) {
                char c = event.getCharCode();
                if (Character.isLowerCase(c)) {
                    //I wish there is a method like below,
                    //or other ways to achieve the same result


There is no mechanism to intercept and altering the event like awt/swing do. So what the best solution for this problem? What can I use to achieve this?



Maybe you could just convert the whole text in the input uppercase after typing?

Yes, sure… I already have that idea before… like below snippet

            public void onKeyPress(KeyPressEvent event) {
                char c = event.getCharCode();
                if (Character.isLowerCase(c)) {
                    c = Character.toUpperCase(c);
                    String oldv = tf.getValue();
                    int cursorPos = tf.getCursorPos();
                    String newv = oldv.substring(0,cursorPos) + c + oldv.substring(cursorPos);

but are you sure this is the correct solution? IMHO this is cheated solution and it might buggy.

It is always cheating when you are working at browser level :slight_smile: If it works, don’t fix it!

Could somebody take a look at the code, I have a question…
When the string we typed is longer than textfield length, why the textfield didn’t scroll to cursor position just like usual.