我的大部分编程经验都在C++中。我在Javafx中学习了很多很棒的功能,但到目前为止,我的最大障碍是在Javafx中编写应用程序时是否使用了良好的编程实践。首先,我被教导要在C++中尽可能保持“主要功能”的清洁,所以它主要包含我自己的类对象及其方法。在fx工作时,这是一个很好的做法吗?即在我的主类之外创建一些包含start方法的类,然后将这些类的对象添加到start方法中?这里是一个例子:Javafx良好的编程实践
这个程序创建一个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.
我创建了一个名为盒类:
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,然后将它添加到我的BorderPane中,从而导致我做错了什么?
我知道这很多,但如果有人可以给我一些方向,我将不胜感激。非常感谢!
虽然第二种方法比较好,因为在各种答案中已经说过,但我想指出一个最佳做法是为所有样式选项创建一个单独的“css文件”。 – ItachiUchiha