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。
答案 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,但是当有人触发事件时,它的值将被设置,因此您需要检查是否设置了值。