Jalankan metode di Pengontrol FXML di KeyEvent

Saya memiliki fungsi yang memperbarui ListView di Kelas Pengontrol FXML saya. Saya ingin ini dijalankan setiap kali pengguna menekan F5.

Saya tidak yakin apa cara terbaik untuk mencapai ini dan mencoba yang berikut:

1. Dapatkan adegan dari pengontrol

Saya mencoba menampilkan adegan seperti di sini dan menambahkan scene.onKeyPressed(e -> ...);. Namun saya gagal menemukan cara untuk menampilkan adegan tersebut dengan andal.

2. Panggil fungsi tersebut dari luar

Selanjutnya saya mencoba menangani ini dari pengontrol adegan saya, bukan cara pilihan saya, karena saya tidak ingin memanggil metode ini ketika file khusus ini tidak dimuat. Saya memuat file FXML dengan layout.setCenter(FXMLLoader.load(...)); Saya gagal mendapatkan instance dari Controller itu sendiri, di mana saya dapat memanggil metode tersebut.

Apa yang salah dengan desain saya? Atau apakah ada anotasi @FXML yang memungkinkan saya menangani KeyEvent?

Contoh

Manajer Aplikasi:

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

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

Pengontrol LobiFxml:

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


person Lukas    schedule 17.04.2021    source sumber
comment
contoh minimal yang dapat direproduksi .. dan pastikan Anda telah mempelajari tutorial tentang cara menggunakan fxml (setiap ada yang dilengkapi dengan penjelasan tentang cara melampirkan event handler;)   -  person kleopatra    schedule 17.04.2021
comment
Pada Tombol saya akan menambahkan onAction="#handlerMethod" di file fxml (dan metode yang sesuai di pengontrol). Tapi saya ingin ini saat tombol ditekan dalam tampilan ini, tindakan apa yang benar untuk ini, dan di mana saya akan meletakkannya? Oke saya menjawab pertanyaan saya di sana, maaf haha. Saya perlu menggunakan onKeyPressed pada objek induk di file FXML.   -  person Lukas    schedule 17.04.2021


Jawaban (1)


Saya hanya perlu menambahkan onKeyPressed="#handleKeyPress" ke item tata letak FXML dan menangani metode ini di Controller.

person Lukas    schedule 17.04.2021