Em đang gặp 1 vấn đề đó là không biết làm sao để gọi 1 component từ FXML cha. 2 file FXML cha và con là riêng biệt, em chỉ load cái fxml phía trong 1 pane của FXML cha. Giờ em muốn bấm button trong FXML con thì gọi tới 1 component trong lớp cha. Cái này nó kiểu gọi 1 component của 1 FXML từ 1 FXML khác. Cần cao nhân chỉ điểm
Load FXML trong 1 FXML cha và kích hoạt event từ FXML cha
Tùy vào cách sử dụng của bạn, thiết kết của bạn, cần chú ý những concepts sau bạn sẽ tìm ra:
-
Hoặc con giữ “reference” Controller của cha. Bản thân controller của cha có thể truy trực tiếp đến node con cần thiết.
-
Hoặc con giữ “reference” của node cha. Từ node cha có thể truy theo concept như DOM với
lookup(String s)
, trong đó s là class của node hoặc id của node. -
Ko giữ “reference” gì cả, truy ngược với
getParent()
rồi lài truy xuôi vớilookup()
.
PS: Javafx bạn bạn nên đổi cách gọi “component” -> node.
Em không hiểu lắm về cụm từ reference, anh có thể giải thích thêm được không ạ?. Em cảm ơn
4 . Controller của node cha giữ “reference” của controller con. Đứng ở context của cha để add EventHandler
vào con, trong EventHandler
thích làm gì với thành phần của cha thì làm.
5 . Tại node con, fireEvent()
. Cha là container của con nên nằm sẵn trong dispatchain
, gắn EventHandler
cho node cha với event này. Trong EventHandler
thích làm gì thì làm. Cách này cũng ko phải quan tâm đến reference nào cả.
Nếu bạn học C++ thì biết reference là gì, tham chiếu tới đối tượng / biến. nhưng đây là Java, mình tạm gọi là “reference”.