Câu hỏi: HSF302 - Phần 8: Nền tảng giao diện JavaFX
23 câu trắc nghiệm kèm lời giải của môn HSF302 - Làm việc với Spring Framework, xếp theo thứ tự nhập vào ngân hàng.
Danh sách câu hỏi
LabelButtonTextFieldImageViewĐáp án đúng: "Scene scene = new Scene(new Button("Click Me")); ". Trong JavaFX, Scene là vùng chứa toàn bộ đồ thị nút (scene graph) và constructor của nó nhận một Parent làm nút gốc; Button kế thừa Control, Control kế thừa Region rồi Parent, nên truyền thẳng một Button vào constructor của Scene là hợp lệ và nút đó trở thành gốc của cảnh, tức đã được đưa vào scene. "Stage stage = new Stage(new Button("Click Me")); " không biên dịch được vì Stage là cửa sổ, chỉ có constructor rỗng hoặc nhận StageStyle, và nội dung được gắn vào Stage qua setScene chứ không phải qua một nút. "Button button = new Button("Click Me"); " chỉ tạo ra đối tượng nút trong bộ nhớ, chưa gắn vào layout hay Scene nào nên chưa hiện lên màn hình. "Node node = new Node(new Button("Click Me")); " sai vì Node là lớp trừu tượng, không thể new trực tiếp và cũng không có constructor nhận một nút con.
Đáp án đúng: "<fx:controller fx:id="controller" value="MyController" />". Cần nói thẳng: trong FXML thật không có phần tử nào tên fx:controller; controller được gắn bằng thuộc tính fx:controller đặt trên phần tử gốc của tệp, ví dụ <VBox fx:controller="com.foo.MyController">, rồi FXMLLoader tạo đối tượng lớp đó và tiêm các trường @FXML theo fx:id. Vì vậy cả bốn phương án đều không phải cú pháp chạy được, và đáp án ở đây được giữ theo khoá của đề chứ không có căn cứ kỹ thuật nào để xếp nó trên phương án chỉ có value: cả hai cùng mang ý khai báo lớp controller MyController qua tên fx:controller, còn thuộc tính fx:id thêm vào không đóng vai trò gì trong việc gắn controller, nó chỉ đặt định danh cho một phần tử. "<fxml controller="MyController" /> " sai vì FXML không có thẻ fxml, và controller ở đây thiếu tiền tố fx. "<fx:controller type="MyController" />" sai vì type không phải thuộc tính dùng để gắn controller. "<fx:controller value="MyController" />" cũng sai cú pháp y như vậy vì vẫn dùng một phần tử fx:controller không tồn tại.
main()start()launch()run()VBoxFlowPaneBorderPaneHBoxEventHandlerSceneGraphControllerActionstyles.cssui.cssdesign.csstheme.xmlLabelButtonTextFieldImageViewGridPaneBorderPaneVBoxHBoxStackPaneBorderPaneHBoxVBoxLabelButtonTextFieldImageViewButton btn = new Button("Click");
btn.setOnAction(e -> System.out.println("Pressed"));What happens when user clicks the button?