2011-07-15 27 views
1

setFocus()有問題。爲什麼它不能在textBox上工作?無法使setFocus()正常工作

這是我的代碼:

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); 
    } 
} 
+0

也許嘗試把更多的精力投入工作! '抱歉無法抵擋':D – gotomanners

回答

3

這樣做的問題是,文本框,需要在瀏覽器中繪製之前,你可以在其上運行的setFocus()。這是GWT表明最新的 -

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

使用此代碼,而不是簡單的調用setFocus(true);