我有一个函数可以更新我的 FXML 控制器类中的 ListView
。我希望每次用户按下 F5
时都会运行它。
我不确定实现这一目标的最佳方法是什么,并尝试了以下操作:
我试图获得类似 here 的场景并添加了 scene.onKeyPressed(e -> ...);
。但是我没能找到可靠的方法来获取场景。
此外,我尝试从我的场景控制器处理这个问题,这不是我喜欢的方式,因为我不想在没有加载这个特定文件时调用这个方法。我用 layout.setCenter(FXMLLoader.load(...));
加载了 FXML 文件,但未能获得控制器本身的实例,我可以在其中调用该方法。
我的设计有什么问题?或者是否有 @FXML 注释允许我处理 KeyEvent
?
应用管理器:
@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");
}
答案 0 :(得分:0)
我只需要将 onKeyPressed="#handleKeyPress"
添加到 FXML 布局项并在控制器中处理此方法。