我的想法: 我想有一个文本字段,用户可以在其中输入命令。他的所有输入都应保存在列表中,作为一种历史记录,用户可以使用其箭头键滚动浏览它们。
我的问题: 我多次调试代码,将命令正确地添加到历史记录(文本区域)和列表中,但是在事件处理程序内部,对我的文本区域,文本字段和列表的所有引用始终为空。
我的代码:
public class Controller extends Application implements Initializable {
@FXML
private TextField commandInput;
@FXML
private TextArea commandHistory;
private LinkedList<String> commandList = new LinkedList<>();
@Override
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("layout.fxml"));
primaryStage.setTitle("Airport");
Scene scene = new Scene(root, 700, 275);
primaryStage.setScene(scene);
primaryStage.show();
scene.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
if (!commandList.isEmpty()) {
switch (event.getCode()) {
case UP:
commandInput.setText(commandList.getFirst());
commandList.addLast(commandList.getFirst());
commandList.removeFirst();
break;
case DOWN:
commandInput.setText(commandList.getLast());
commandList.addFirst(commandList.getLast());
commandList.removeLast();
break;
}
}
System.out.println("Pressed: " + event.getCode());
});
}
private boolean parseString(String input) {
//TODO: Write Parser
return true;
}
public void enterPressed(ActionEvent actionEvent) {
String input = commandInput.getText();
if (parseString(input)) {
addCommandToHistory(input);
commandList.add(input);
System.out.println(commandList.getFirst());
commandInput.setText("");
} else {
addCommandToHistory("input is no command");
}