Java: 我想在单击按钮时获取 TextField 值。怎么做?
Java: I want to get TextField value when I clicked a button. How to do it?
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;
}
我不能这样做。他们说 "local variables referenced from an inner class must be final or effectively final"。有其他方法吗?
非常感谢。
PS。我用的是小程序。
制作name
伪决赛:
final String[] name = new String[1];
并以这种方式访问它:
name[0] = nameTextField.getText();
您不能在 createCharacterScene()
方法中直接读取此值。因为现在还不得而知。你唯一能做的就是定义一个事件处理程序,它会在按键时被触发。
Consumer<String> nameConsumer = text -> { /*You will handle event here*/};
myButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
nameConsumer.apply(nameTextField.getText());
}
});
更便宜的版本是对 final 修饰符使用一个小的解决方法:
final String[] nameHolder = new String[1];
myButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
nameHolder[0] = nameTextField.getText();
}
});
这里的nameHolder一开始会保持null,但是当有人触发事件的时候,它的值会被设置,所以你需要检查是否设置了值。
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;
}
我不能这样做。他们说 "local variables referenced from an inner class must be final or effectively final"。有其他方法吗?
非常感谢。
PS。我用的是小程序。
制作name
伪决赛:
final String[] name = new String[1];
并以这种方式访问它:
name[0] = nameTextField.getText();
您不能在 createCharacterScene()
方法中直接读取此值。因为现在还不得而知。你唯一能做的就是定义一个事件处理程序,它会在按键时被触发。
Consumer<String> nameConsumer = text -> { /*You will handle event here*/};
myButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
nameConsumer.apply(nameTextField.getText());
}
});
更便宜的版本是对 final 修饰符使用一个小的解决方法:
final String[] nameHolder = new String[1];
myButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
nameHolder[0] = nameTextField.getText();
}
});
这里的nameHolder一开始会保持null,但是当有人触发事件的时候,它的值会被设置,所以你需要检查是否设置了值。