JavaFX,使用java或fxml创建UI更好吗?

时间:2017-11-06 16:49:27

标签: user-interface javafx

我将根据输入列表有一个需要添加x次的元素。使用java代码并向按钮添加监听器是否更好:

private void createList(List<House> houses){
        for(House house : houses){
            StackPane stackPane = new StackPane();
            Region region = new Region();
            RadioButton radioButton = new RadioButton();
            Button button = new Button();

            stackPane.setMinWidth(500);
            stackPane.setMaxWidth(800);
            stackPane.setMaxHeight(40);
            stackPane.setPrefHeight(40);

            region.getStyleClass().add("house-region");
            region.setPrefHeight(Double.MAX_VALUE);

            radioButton.setAlignment(Pos.CENTER_LEFT);
            radioButton.setText(house.getStreet()+" "+house.getHouseNumber()+", "+house.getPostCode()+", "+house.getCity()+", "+house.getCountry());
            VBox.setMargin(radioButton, new Insets(0, 0, 0, 30));

            button.setPadding(new Insets(0, 15, 0, 15));
            button.setText(Word.translate("delete"));
            button.setPrefHeight(Double.MAX_VALUE);
            button.setMaxHeight(25);
            button.setAlignment(Pos.CENTER_RIGHT);

            stackPane.getChildren().addAll(region, radioButton, button);
            houseListVBox.getChildren().add(stackPane);
        }
    }

或者将我的StackPane放在单独的fxml中并使用相应的控制器:

private void createList(List<House> houses){
        for(House house : houses){
            FXMLLoader loader = new FXMLLoader(); //Loads an object hierarchy from an XML document.
            loader.setLocation(MainApp.class.getResource(element)); // which document
            StackPane stackPane = (StackPane) loader.load();
            houseListVBox.getChildren().add(stackPane);
        }
    }

哪一种更好,取决于性能,良好做法?

1 个答案:

答案 0 :(得分:-1)

Oracle确实推荐使用FXML进行Java API上的UI设计 特别是它使用MVC方法,它可以使用Scene Builder轻松设计,Why Use FXML是JAVA-FX应用程序的Drag n Drop UI设计器。 表示层(UI)与应用层(逻辑)隔离,这使得在需要时可以轻松更改应用程序的外观。 FXML为您的应用程序带来了可扩展性和可维护性

FXML的其他好处

由于场景图在FXML中更加透明,因此开发团队可以轻松创建和维护可测试的用户界面。 FXML不是编译语言;您无需重新编译代码即可查看更改。

可以在读取文件时本地化FXML文件的内容。例如,如果使用en_US语言环境加载FXML文件,则它会根据以下资源字符串为标签生成字符串“First Name”:

如果区域设置更改为fr_FR并重新加载FXML文件,则标签显示“Prénom。”

对于 Java代码 不正确 也是如此,因为您必须手动更新每个元素的内容通过获取对它的引用并调用适当的setter(例如setText())来获取用户界面。

请参阅oracle建议:JavaFX Best PracticesDemo