首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javafx良好的编程实践

Javafx良好的编程实践
EN

Stack Overflow用户
提问于 2015-06-01 07:06:24
回答 1查看 3.3K关注 0票数 2

我的大部分编程经验都来自于C++。我正在学习Javafx中的许多优秀特性,但到目前为止,我最大的障碍是在用Javafx编写应用程序时是否使用了良好的编程实践。首先,我被教导要在C++中尽可能保持“主函数”的整洁,所以它主要包含我自己的类对象及其方法。在fx中工作时,这是不是一般的好做法?也就是说,在我的main类(包含start方法)之外创建许多类,然后将这些类的对象添加到start方法中?下面是一个示例:

此程序创建一个BorderPane,并在其顶部放置一个带有两个按钮的HBox。我用两种不同的方式写了这个程序。One -所有的方法都在主类中。2-我创建了一个单独的类,它实例化了HBox,然后在Main中使用它。

1.

代码语言:javascript
复制
public class Main extends Application {
    @Override
    public void start(Stage primaryStage) 
    {
        BorderPane border = new BorderPane();
        HBox hbox = addHBox();
        border.setTop(hbox);

        Scene scene = new Scene (border, 540,680);
        primaryStage.setScene(scene);
        primaryStage.show();

    }
    public HBox addHBox()
    {
        HBox hb = new HBox();
        hb.setPadding(new Insets(15,12,15,12));
        hb.setSpacing(10);
        hb.setStyle("-fx-background-color: #336699;");

        Button btnCurrent = new Button("Current");
        btnCurrent.setPrefSize(100, 20);
        btnCurrent.setStyle("-fx-font: 12 times; -fx-base: #b6e7c9;");

        Button btnProjected = new Button("Projected");
        btnProjected.setPrefSize(100,20);
        btnProjected.setStyle("-fx-font: 12 times; -fx-base: #b6e7c9;");

        hb.getChildren().addAll(btnCurrent,btnProjected);
        hb.setAlignment(Pos.CENTER);
        return hb;
    }

    public static void main(String[] args) 
    {
        launch(args);
    }
}

2.

我创建了一个名为Box的类:

代码语言:javascript
复制
public class Box extends HBox{


HBox hb = new HBox();
    public Box()
    {

        hb.setPadding(new Insets(15,12,15,12));
        hb.setSpacing(10);
        hb.setStyle("-fx-background-color: #336699;");

        Button btnCurrent = new Button("Current");
        btnCurrent.setPrefSize(100, 20);
        btnCurrent.setStyle("-fx-font: 12 times; -fx-base: #b6e7c9;");

        Button btnProjected = new Button("Projected");
        btnProjected.setPrefSize(100,20);
        btnProjected.setStyle("-fx-font: 12 times; -fx-base: #b6e7c9;");

        hb.getChildren().addAll(btnCurrent,btnProjected);
        hb.setAlignment(Pos.CENTER);

        getChildren().add(hb);
    }

}

然后在我的main函数中使用它:

代码语言:javascript
复制
public class Main extends Application {
    @Override
    public void start(Stage primaryStage) 
    {
        BorderPane border = new BorderPane();
        Box hbox = new Box();
        border.setTop(hbox);

        Scene scene = new Scene (border, 540,680);
        primaryStage.setScene(scene);
        primaryStage.show();

    }
    public static void main(String[] args) 
    {
        launch(args);
    }
}

这是我的主要问题,但是,如果第二种风格(创建您自己的类并在您的主类中使用它们)确实是可行的,那么使用我的特定示例,它会将HBox放在一个奇怪的位置,并且看起来一点也不正确。在我的Box类的构造函数中实例化HBox,然后将它添加到main中的BorderPane中,我做错了什么?

我知道这很多,但如果有人能给我一些方向,我会非常感激。非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2015-06-01 16:13:38

1)一般来说,每个视图引入一个类是很好的做法。如果你遵循这个建议,你的main函数在这个例子中将保持干净。在技术上不需要保持你的主函数的整洁,只需要以一种整洁和可维护的方式来组织你的代码。

这意味着在本例中创建:

代码语言:javascript
复制
public class PrimaryView extends BorderPane {
    public PrimaryView() { .... }
}

然后在你的应用程序中:

代码语言:javascript
复制
public void start(Stage primaryStage) {
    Scene scene = new Scene (new PrimaryView(), 540,680);
    primaryStage.setScene(scene);
    primaryStage.show();
}

2)在您的Box类中,您正在向HBox添加一个HBox,这意味着您正在创建两个Box,这可能就是它看起来不同的原因。你想做的可能是:

代码语言:javascript
复制
public class Box extends HBox {

    public Box() {

        this.setPadding(new Insets(15,12,15,12));
        this.setSpacing(10);
        this.setStyle("-fx-background-color: #336699;");

        ...

        // no need
        //getChildren().add(hb);
    }
 }

3)使用JavaFX的一大优点是SceneBuilder和带有样式的CSS文件的FXML。开始的时候有点复杂,但是你会习惯的。

一个非常有趣的框架是AfterburnerFX,它有一个很好的例子。对于初学者来说,它并不容易理解,但它展示了如何组织代码和应用程序。关注FXML和你的View类的绑定。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30563634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档