java - LibGDX:更改焦点上文本字段的文本

标签 java libgdx

我有一个通过循环添加到表中的文本字段数组。添加的 TextField 数量取决于用户给出的输入。
文本字段用文本“Player #”初始化(# 通过循环递增)。 我希望能够在每个文本字段获得焦点时从它们中删除此文本,并且如果在失去焦点时未输入任何内容,它将恢复为原始字符串。
我的问题是能够访问 TextField 以在 FocusListener 中设置文本。
这是我的代码:(注意:playernames 是在代码片段外部定义的表。)

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

如何访问监听器内的 TextField 以便能够更改文本?

最佳答案

最简单的选择可能是添加一个最终变量来保存循环中的文本字段。然后可以在处理程序中直接引用它。一般来说,如果您想从匿名类访问外部变量,请确保它是最终的。

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) {
            // Access textField here and below as needed
        }
        else {
            // ...
        }
    }
  });
  
}

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

关于java - LibGDX:更改焦点上文本字段的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37824237/

相关文章:

java - Guava 可选与 Bean 验证

java - libGdx - actor 监听器 touchDown、touchUp 不起作用。是的,我用过 setBones

java - LIBGDX 为主菜单创建 Actor 和舞台

android - LibGDX 的 TexturePacker 与 gradle

java - 反序列化 Jackson 动态键值

java - 使用模型映射器进行外键映射

java - 如何针对不同的 Jackson 反序列化失败创建自定义 HTTP 响应消息?

java - 从jtable导出到excel时如何合并列?使用 Apache POI

android - Google Play 游戏服务的登录问题

java - 调用 new World() 时出现 UnsatisfiedLinkError