运行 FXML 控制器中的 KeyEvent 方法

Run method in FXML Controller on KeyEvent

我有一个函数可以在我的 FXML 控制器 Class 中更新 ListView。每次用户按下 F5.

时,我都希望这个 运行

我不确定实现此目标的最佳方法是什么,并尝试了以下方法:

1。从控制器获取场景

我试了下here这样的场景,加了scene.onKeyPressed(e -> ...);。但是我没能找到可靠的方法来获取场景。

2。从外部调用函数

此外,我尝试从我的场景控制器处理这个问题,这不是我的首选方式,因为我不想在未加载此特定文件时调用此方法。我用 layout.setCenter(FXMLLoader.load(...)); 加载了 FXML 文件我未能获得控制器本身的实例,我可以在其中调用该方法。

我的设计有什么问题?或者是否有允许我处理 KeyEvent?

的 @FXML 注释

例子

应用程序管理器:

@Override
public void start(Stage stage){
   BorderPane layout = new BorderPane();
   Scene scene = new Scene(layout);

   layout.setCenter(FXMLLoader.load(getClass().getResource("/designs/lobby.fxml");
}

LobbyFxmlController:

@FXML private ListView<Label> lobbyListView;

@FXML
public void initialize(){
    //I can't get the scene here
}

private void loadLobbies(){
    // I need to run this on F5 presses
    lobbyListView.setItems("lobby 1", "lobby 2", "lobby 3");
 }

我只需要将 onKeyPressed="#handleKeyPress" 添加到 FXML 布局项并在控制器中处理此方法。