有没有办法在控制器类中而不是在构造函数中创建JavaFX GUI?

时间:2018-03-19 13:17:32

标签: java javafx

我正在为一所需要GUI的学校项目工作,所以我决定学习JavaFX。使用Swing,您可以像控制器

一样在控制器中构建一个gui
public class Controller
{ 
   public Controller ()
   {
      // insert code
   }
}  

并在构造函数中调用它

public class Constructor
{
   public static void main(String[] args)
   {
      Controller GUI = new Controller();
   }
}

我一直试图在JavaFX上使用这个设置,几乎没有运气,甚至可能吗?

1 个答案:

答案 0 :(得分:1)

当您运行JavaFX应用程序时,您必须扩展Main类中的Application类:

import javafx.application.Application;
import javafx.stage.Stage;

public class Main extends Application{ //extends Application
  public Main() {
    launch(args);  //start window
  }

  @Override
  public void start(Stage primaryStage) throws Exception {
    //code here
  }
}

现在您必须覆盖start方法。在此start方法中,您将舞台primaryStage作为参数,这是您的窗口。要调用start方法,您必须在main方法中调用:launch(args)

现在,您可以使用start方法添加代码。

当您在另一个类(如Contoller)中创建GUI时,您有不同的方法来执行此操作。 首先,我们在构造函数中查看舞台。要显示舞台,首先需要将场景设置为舞台:
stage.setScene(Scene scene);
要创建舞台,您必须在构造函数中添加Parent对象
new Scene(Parent root);
一些父对象是GroupRegion
Parent的其他子类包括:PaneGridPaneBorderPaneChartTableViewListView和更多。

我们从Start方法开始有一个舞台,所以我们现在需要一个Scene 我们可以在start方法中创建它并将其添加到舞台:

Scene scene = new Scene();
primaryStage.setScene(scene);

此代码无法运行,因为Scene()需要Parent类型的参数 现在我们可以创建我们的Controller类,在其中我们使用所有GUI组件创建Parent对象。为此,我们在Controller类中创建一个Parent对象(在本例中为BorderPane):

public class Controller {

  private final BorderPane borderPane;

  public Controller() {
    borderPane = new BorderPane();
    //gui code here
  }
}

现在我们可以在Controller类中创建我们的gui Finnaly我们在Controller类中创建了一个函数来为我们的gui获取这个Borderpane:

public Pane getParentObject(){
    return borderPane;
  }

在我们的start方法中,我们现在将此Parent对象设置为Scene:

Controller controller = new Controller();
Scene scene = new Scene(controller.getParentObject());
primaryStage.setScene(scene);
primaryStage.show();

最后我们只需要展示我们的舞台。

我建议你用JavaFx搜索一些教程,在互联网上有一堆好的视频或阅读教程

我希望我能帮到你