2016-06-15 17 views
0

Ich habe ein Array von TextFields durch eine Schleife zu einer Tabelle hinzugefügt. Die Anzahl der hinzugefügten Textfelder hängt von einer vom Benutzer angegebenen Eingabe ab.
Die TextFields werden mit dem Text "Player #" initialisiert (# wird von der Schleife inkrementiert). Ich möchte in der Lage sein, diesen Text aus jedem Textfeld zu entfernen, wenn sie fokussiert sind, und wenn nichts beim Verlieren des Fokus eingegeben wird, wird auf die ursprüngliche Zeichenfolge zurückgesetzt.
Mein Problem hier ist in der Lage, auf das TextField zuzugreifen, um den Text im FocusListener festzulegen.
Hier ist mein Code: (ANMERKUNG:. Spielernamen ist eine Tabelle außerhalb des Codeausschnitt definiert)LibGDX: Text von Textfeld auf Fokus ändern

for(int i=0; i<MainMenu.numplayers; i++) { 
    playername[i] = new TextField("Player " + (i+1), skin); 
    playernames.add(new Label("Player " + (i+1) + ":", skin, "black")).padRight(5.0F).padBottom(5.0F); 
    playernames.add(playername[i]).width(125.0F).padBottom(5.0F); 
    playernames.row(); 

    playername[i].addListener(new FocusListener() { 
     public void keyboardFocusChanged(FocusListener.FocusEvent event, Actor actor, boolean focused) { 
      if(focused == true) { 
       /** change text to "" */ 
      } 
      else if(focused==false){ 
       /** change text back to "Player #" if nothing was typed */ 
      } 
     } 
    }); 

Wie kann ich die TextField- innerhalb des Listener Zugriff auf den Text ändern zu können?

Antwort

1

Die einfachste Option wäre, eine letzte Variable hinzuzufügen, die das Textfeld in der Schleife enthält. Dies kann dann direkt im Handler referenziert werden. Wenn Sie auf eine äußere Variable aus einer anonymen Klasse zugreifen möchten, stellen Sie im Allgemeinen sicher, dass sie endgültig ist.

for(int i = 0; i < MainMenu.numplayers; i++) { 
    final TextField textField = new TextField("Player " + (i+1), skin); 
    playername[i] = textField; 
    // ... 

    textField.addListener(new FocusListener() { 
    public void keyboardFocusChanged(FocusListener.FocusEvent event, Actor actor, boolean focused) { 
     if(focused == true) { 
      // Access textField here and below as needed 
     } 
     else if(focused == false){ 
      // ... 
     } 
    } 
    }); 

} 

Ich denke, die Schauspieler für den Fall Bezug genommen sollte das Textfeld sein, aber dieser Ansatz würde eine Art Guss erfordern ...

Verwandte Themen