TextInputListener将字符串转换为Label

时间:2015-04-19 17:49:07

标签: android libgdx label

我查看了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对象引用" 。但我确保输入一些文字并按回车键/确定。

2 个答案:

答案 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
        }


    });

    ...