当前位置: 首页 > 知识库问答 >
问题:

Javafx良好编程实践

汲灿
2023-03-14

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

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

1.

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的类:

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);
    }

}

然后在我的主要功能中使用它:

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中,这有什么不对吗?

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

共有1个答案

楚嘉纳
2023-03-14

1)一般来说,每个视图引入一个类是很好的做法。如果您遵循了该建议,那么在本例中,您的主要功能将保持干净。在技术上不需要保持您的主要功能干净,这只是以一种干净和可维护的方式组织您的代码的问题。

在本例中,这意味着创建:

public class PrimaryView extends BorderPane {
    public PrimaryView() { .... }
}

则在应用程序中:

public void start(Stage primaryStage) {
    Scene scene = new Scene (new PrimaryView(), 540,680);
    primaryStage.setScene(scene);
    primaryStage.show();
}

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

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和视图类的绑定。

 类似资料:
  • 问题内容: 我正在使用lucene为文档建立索引并执行搜索,之后我立即将其删除。所有这一切都可以看作是有点原子的动作,包括以下步骤: 索引(作者) - >搜索(搜索者) - >按得分获取文档(阅读器) - >删除文档(阅读器) 该操作可由同一索引上的多个并发线程执行(使用)。 重要说明: 每个线程处理一组单独的文档,因此一个线程不会碰到另一个线程的文档 为此,我有几个问题: 1)我应该使用的单个实

  • 目标 遵循类大小、方法大小和方法名称的最佳实践 了解重构的重要性 保持一致的编码风格和注释用法 使用内置记录功能 最佳编码实践 您现在已经学习了本学习路径的一半内容,已经掌握了足够多的 Java 语法来编写基本 Java 程序。在继续学习更高级的主题之前,目前是一个了解一些最佳编码实践的不错时机。阅读一些可帮助您编写更干净、更可维护的 Java 代码的必要建议。 保持类小巧 目前您已经创建了一些类

  • 但是当我试图在Netbeans中清理和构建它时,它被这条线噎住了: 错误是:

  • 问题内容: 我对处理Java中的异常有一些疑问。我读了一些,并得到了一些相互矛盾的指导方针。 异常处理的最佳实践 让我们看一下提到的文章: 它指出, 如果“客户端代码无法执行任何操作”, 通常应该避免使用检查的异常。但这到底是什么意思?在GUI中显示错误消息是否是冒充受检查的异常的充分原因?但这将迫使GUI程序员记住记住RuntimeException及其后代以显示潜在的错误信息。 本文提出的第二

  • 问题内容: 已关闭 。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗? 更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 改善这个问题 我已经和我的一个朋友进行了很长的讨论,关于Java主方法的正确和正确使用。基本上我们有一个这样的类: 但是主要方法放在哪里?我认为“保留代码所属的位置”是一种好习惯,因此可以将上面的代码转换为 虽然我的伙伴认为“启动代码与应用程序本身