运行 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 布局项并在控制器中处理此方法。
我有一个函数可以在我的 FXML 控制器 Class 中更新 ListView
。每次用户按下 F5
.
我不确定实现此目标的最佳方法是什么,并尝试了以下方法:
1。从控制器获取场景
我试了下here这样的场景,加了scene.onKeyPressed(e -> ...);
。但是我没能找到可靠的方法来获取场景。
2。从外部调用函数
此外,我尝试从我的场景控制器处理这个问题,这不是我的首选方式,因为我不想在未加载此特定文件时调用此方法。我用 layout.setCenter(FXMLLoader.load(...));
加载了 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");
}
我只需要将 onKeyPressed="#handleKeyPress"
添加到 FXML 布局项并在控制器中处理此方法。