无法使setFocus()工作

时间:2011-07-15 09:39:52

标签: java gwt

我遇到setFocus()的问题。为什么它不适用于textBox?

这是我的代码:

package com.test.test1;

import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.KeyboardListener;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.user.client.ui.FocusWidget;

public class Logowanie extends Composite {
    public Logowanie(final Spr spr) {

        VerticalPanel verticalPanel = new VerticalPanel();
        initWidget(verticalPanel);

        Label lblZalogujSi = new Label("Zaloguj si\u0119");
        lblZalogujSi.setStyleName("title");
        verticalPanel.add(lblZalogujSi);

        FlexTable flexTable = new FlexTable();
        verticalPanel.add(flexTable);

        Label lblLogin = new Label("Login:");
        flexTable.setWidget(0, 0, lblLogin);

        TextBox textBox = new TextBox();
        textBox.setFocus(true);

        flexTable.setWidget(0, 1, textBox);

        Label lblHaso = new Label("Has\u0142o:");
        flexTable.setWidget(1, 0, lblHaso);

        TextBox textBox_1 = new TextBox();
        flexTable.setWidget(1, 1, textBox_1);

        CheckBox chckbxZapamitajMnie = new CheckBox("Zapami\u0119taj mnie na tym komputerze");
        flexTable.setWidget(2, 1, chckbxZapamitajMnie);

        Button btnZaloguj = new Button("Zaloguj");

        KeyPressHandler kph = new KeyPressHandler() {
            public void onKeyPress(KeyPressEvent event) {
                if (event.getCharCode() == KeyCodes.KEY_ENTER){
                    spr.login();
                }
            }
        };

        textBox.addKeyPressHandler(kph);
        textBox_1.addKeyPressHandler(kph);

        btnZaloguj.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                spr.login();
            }
        });
        flexTable.setWidget(3, 1, btnZaloguj);
    }
}

1 个答案:

答案 0 :(得分:3)

这个问题是需要在浏览器中绘制文本框,然后才能在其上运行setFocus()。这是gwt建议的最新消息 -

Scheduler.get().scheduleDeferred(new ScheduledCommand() {
    public void execute () {
        textBox.setFocus(true);
    }
   });

使用此代码代替普通调用setFocus(true);

相关问题