在 KeyEvent 上的 FXML 控制器中运行方法

时间:2021-04-17 15:45:34

标签: java javafx fxml

我有一个函数可以更新我的 FXML 控制器类中的 ListView。我希望每次用户按下 F5 时都会运行它。

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

1.从控制器获取场景

我试图获得类似 here 的场景并添加了 scene.onKeyPressed(e -> ...);。但是我没能找到可靠的方法来获取场景。

2.从外部调用函数

此外,我尝试从我的场景控制器处理这个问题,这不是我喜欢的方式,因为我不想在没有加载这个特定文件时调用这个方法。我用 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");
 }

1 个答案:

答案 0 :(得分:0)

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