Java:我想在单击按钮时获取TextField值。怎么做?

时间:2017-11-15 12:09:09

标签: java button applet awt textfield

public Monster createCharacterScene() {
    String name;
    TextField nameTextField = new TextField();
    nameTextField.setLocation(65, 50);
    nameTextField.setSize(60, 10);
    Button myButton = new Button("OK");
    myButton.setLocation(25, 50);
    myButton.setSize(30, 40);
    add(myButton);
    add(nameTextField);
    myButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            name = nameTextField.getText();
        }
    });
    return null;
}

我不能这样做。他们说“从内部类别引用的局部变量必须是最终的或有效的最终”。有替代方法吗?

非常感谢。

PS。我使用applet。

2 个答案:

答案 0 :(得分:0)

使name成为伪决赛:

  final String[] name = new String[1];

以这种方式访问​​它:

 name[0] = nameTextField.getText();

答案 1 :(得分:0)

您无法直接在createCharacterScene()方法中读取此值。因为它还未知。你唯一能做的就是定义一个在按键时触发的eventHandler。

Consumer<String> nameConsumer = text -> { /*You will handle event here*/};
myButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            nameConsumer.apply(nameTextField.getText());
        }
    });

更便宜的版本是使用一个小的解决方法来进行最终修饰:

final String[] nameHolder = new String[1];
myButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            nameHolder[0] = nameTextField.getText();
        }
    });

这里nameHolder最初将保持为null,但是当有人触发事件时,它的值将被设置,因此您需要检查是否设置了值。