LibGDX:更改焦点

时间:2016-06-15 00:26:03

标签: java libgdx

我有一个循环添加到表的TextFields数组。添加的TextField数量取决于用户给出的输入 TextFields使用文本" Player#"进行初始化。 (#由循环递增)。 我希望能够在聚焦时从每个文本字段中删除此文本,如果在失去焦点时没有输入任何内容,它将恢复为原始字符串。
我的问题是能够访问TextField来设置FocusListener中的文本 这是我的代码:(注意:播放器名称是在代码段之外定义的表格。)

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 */
            }
        }
    });

如何访问Listener中的TextField才能更改文本?

1 个答案:

答案 0 :(得分:1)

最简单的选项可能是在循环中添加一个包含文本字段的最终变量。然后可以在处理程序中直接引用它。通常,如果要从匿名类访问外部变量,请确保它是最终的。

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){
            // ...
        }
    }
  });

}

我认为事件中引用的actor应该是文本字段,但这种方法需要类型转换...