我有一个循环添加到表的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才能更改文本?
答案 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应该是文本字段,但这种方法需要类型转换...