เรียกใช้วิธีการในตัวควบคุม FXML บน KeyEvent

ฉันมีฟังก์ชันที่อัปเดต ListView ในคลาสตัวควบคุม FXML ของฉัน ฉันต้องการให้สิ่งนี้ทำงานทุกครั้งที่ผู้ใช้กด F5

ฉันไม่แน่ใจว่าวิธีที่ดีที่สุดในการบรรลุเป้าหมายนี้คืออะไร และลองทำดังนี้:

1. รับฉากจากคอนโทรลเลอร์

ฉันพยายามดึงฉากแบบ ที่นี่ และเพิ่ม scene.onKeyPressed(e -> ...); แต่ฉันล้มเหลวในการหาวิธีที่จะทำให้ฉากนั้นเชื่อถือได้

2. เรียกใช้ฟังก์ชันจากภายนอก

นอกจากนี้ ฉันพยายามจัดการสิ่งนี้จากตัวควบคุมฉาก ไม่ใช่วิธีที่ฉันชอบ เพราะฉันไม่ต้องการเรียกใช้วิธีนี้เมื่อไม่ได้โหลดไฟล์นี้โดยเฉพาะ ฉันโหลดไฟล์ FXML ด้วย 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");
}

ล็อบบี้ Fxmlคอนโทรลเลอร์:

@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 แหล่งที่มา
comment
ตัวอย่างที่ทำซ้ำได้น้อยที่สุด โปรด .. และตรวจสอบให้แน่ใจว่าคุณได้อ่านบทช่วยสอนเกี่ยวกับวิธีใช้ fxml แล้ว (แต่ละรายการ หนึ่งมาพร้อมกับคำอธิบายวิธีแนบตัวจัดการเหตุการณ์ ;)   -  person kleopatra    schedule 17.04.2021
comment
บนปุ่ม ฉันจะเพิ่ม onAction="#handlerMethod" ในไฟล์ fxml (และวิธีการที่เกี่ยวข้องในคอนโทรลเลอร์) แต่ฉันต้องการสิ่งนี้เมื่อกดปุ่มในมุมมองนี้ การดำเนินการที่ถูกต้องสำหรับสิ่งนี้คืออะไร และฉันจะวางไว้ที่ไหน โอเค ฉันตอบข้อกังวลของฉันไปแล้ว ขอโทษนะ 555 ฉันต้องใช้ onKeyPressed ในวัตถุหลักในไฟล์ FXML   -  person Lukas    schedule 17.04.2021


คำตอบ (1)


ฉันแค่ต้องเพิ่ม onKeyPressed="#handleKeyPress" ในรายการโครงร่าง FXML และจัดการวิธีนี้ในคอนโทรลเลอร์

person Lukas    schedule 17.04.2021