失去对我的事件处理函数中所有内容的引用

时间:2018-12-05 07:06:19

标签: events javafx reference event-handling

我的想法: 我想有一个文本字段,用户可以在其中输入命令。他的所有输入都应保存在列表中,作为一种历史记录,用户可以使用其箭头键滚动浏览它们。

我的问题: 我多次调试代码,将命令正确地添加到历史记录(文本区域)和列表中,但是在事件处理程序内部,对我的文本区域,文本字段和列表的所有引用始终为空。

我的代码:

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");
    }

0 个答案:

没有答案