我的大部分编程经验都是用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)一般来说,每个视图引入一个类是很好的做法。如果您遵循了该建议,那么在本例中,您的主要功能将保持干净。在技术上不需要保持您的主要功能干净,这只是以一种干净和可维护的方式组织您的代码的问题。
在本例中,这意味着创建:
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主方法的正确和正确使用。基本上我们有一个这样的类: 但是主要方法放在哪里?我认为“保留代码所属的位置”是一种好习惯,因此可以将上面的代码转换为 虽然我的伙伴认为“启动代码与应用程序本身