我查看了https://github.com/libgdx/libgdx/wiki/Simple-text-input,我想要的是将其中一个对话框中输入的文本转换为标签。我用这种方式得到了nullpointer:
public class TextInputListener implements Input.TextInputListener {
public String name, year;
@Override
public void input(String text) {
name = "Enter some text.."+ text ;
}
@Override
public void canceled() {
name = "canceled by user";
}
}
然后我有一个按钮打开对话框:
btnEdit.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
TextInputListener listener = new TextInputListener();
Gdx.input.getTextInput(listener, "Enter information", "Name:");
}
});
然后我尝试将该字符串接收到我的标签中:
Label nameLabel = new Label(listener.name, labelstyle);
正如我所说,我在最后一行得到nullpointer"尝试从字段中读取' TextInputListener.name'在null对象引用" 。但我确保输入一些文字并按回车键/确定。
答案 0 :(得分:0)
您永远不会在TextInput侦听器中设置名称字符串。
Gdx.input.getTextInput(listener, "Enter information", "Name:");
我认为这不是使用输入设置字符串,或者在用户实际输入输入之前调用new Label(listener.name, labelstyle);
。
尝试将TextInputListener更改为
public class TextInputListener implements Input.TextInputListener {
public String name = "Enter some text..";
public String year;
@Override
public void input(String text) {
name = "Enter some text.."+ text ;
}
@Override
public void canceled() {
name = "canceled by user";
}
如果不起作用,请尝试检查用户是否输入了文字,然后拨打Label nameLabel = new Label(listener.name, labelstyle);
答案 1 :(得分:0)
我认为有两个问题。
首先,当您使用String对象创建Label时,Label值不会在String值更改时自动更改。至少我没有得到它的工作。因此,您必须手动调用setText(String str)
方法。但要这样做,您需要访问Label对象。
第二个是,您使用listener.name
创建Label,但是您正在changed(ChangeEvent event, Actor actor)
方法中创建侦听器对象,因此如果您不在该方法中创建Label,则侦听器将为null
因此,对于代码,您必须设置如下内容:
public class TextInputListener implements Input.TextInputListener {
private Label label;
public TextInputListener(Label targetLabel) {
label = targetLabel;
}
@Override
public void input(String text) {
label.setText("Enter some text.."+ text);
}
@Override
public void canceled() {
label.setText("canceled by user");
}
}
在GUI创建方法的某处:
private TextInputListener listener; // Class field
...
Label nameLabel = new Label("", labelstyle);
listener = new TextInputListener(nameLabel);
btnEdit.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
Gdx.input.getTextInput(listener, "Enter information", "Name:", ""); // My Gdx version needed a third parameter
}
});
...