📅  最后修改于: 2020-10-14 01:05:14             🧑  作者: Mango
在这里,我们正在创建一个简单的JavaFX应用程序,通过单击舞台上显示的按钮在控制台上打印问候世界。
正如我们之前研究的那样,start()方法是构造JavaFX应用程序的起点,因此我们需要首先重写javafx.application.Application类的start方法。类javafx.stage.Stage的对象传递到start()方法中,因此导入该类并将其对象传递到start方法中。需要导入JavaFX.application.Application才能覆盖启动方法。
该代码将如下所示。
package application;
import javafx.application.Application;
import javafx.stage.Stage;
public class Hello_World extends Application{
@Override
public void start(Stage primaryStage) throws Exception {
// TODO Auto-generated method stub
}
}
可以通过实例化javafx.scene.control.Button类来创建按钮。为此,我们必须将此类导入到我们的代码中。在Button类构造函数中传递按钮标签文本。该代码将如下所示。
package application;
import javafx.application.Application;
importjavafx.scene.control.Button;
import javafx.stage.Stage;
public class Hello_World extends Application{
@Override
public void start(Stage primaryStage) throws Exception {
// TODO Auto-generated method stub
Buttonbtn1=newButton("Say, Hello World");
}
}
JavaFX提供了许多布局。我们需要实现其中之一以便正确可视化小部件。它存在于场景图的顶层,可以看作是根节点。所有其他节点(按钮,文本等)都需要添加到此布局中。
在此应用程序中,我们实现了StackPane布局。可以通过实例化javafx.scene.layout.StackPane类来实现。现在,代码如下所示。
package application;
import javafx.application.Application;
import javafx.scene.control.Button;
import javafx.stage.Stage;
import javafx.scene.layout.StackPane;
public class Hello_World extends Application{
@Override
public void start(Stage primaryStage) throws Exception {
// TODO Auto-generated method stub
Button btn1=new Button("Say, Hello World");
StackPane root=new StackPane();
root.getChildren().add(btn1);
}
}
需要将布局添加到场景。场景保持在应用程序结构层次结构中的较高级别。可以通过实例化javafx.scene.Scene类来创建它。我们需要将布局对象传递给场景类构造函数。现在,我们的应用程序代码如下所示。
package application;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
import javafx.scene.layout.StackPane;
public class Hello_World extends Application{
@Override
public void start(Stage primaryStage) throws Exception {
// TODO Auto-generated method stub
Button btn1=new Button("Say, Hello World");
StackPane root=new StackPane();
root.getChildren().add(btn1);
Scene scene=new Scene(root);
}
}
我们还可以在Scene类构造函数中传递场景所需舞台的宽度和高度。
javafx.stage.Stage类提供了一些重要的方法,需要调用这些方法才能设置舞台的某些属性。我们可以设置舞台的标题。我们还需要调用show()方法,否则将不会显示该阶段。让我们看一下描述如何准备应用程序阶段的代码。
package application;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
import javafx.scene.layout.StackPane;
public class Hello_World extends Application{
@Override
public void start(Stage primaryStage) throws Exception {
// TODO Auto-generated method stub
Button btn1=new Button("Say, Hello World");
StackPane root=new StackPane();
root.getChildren().add(btn1);
Scene scene=new Scene(root);
primaryStage.setScene(scene);
primaryStage.setTitle("First JavaFX Application");
primaryStage.show();
}
}
当我们的应用程序在按钮上打印事件的问候世界时。我们需要为按钮创建一个事件。为此,请在按钮上调用setOnAction()并将一个匿名类Event Handler定义为该方法的参数。
在这个匿名类中,定义一个方法handle(),其中包含有关事件处理方式的代码。在我们的例子中,它正在控制台上打印hello world。
package application;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
import javafx.scene.layout.StackPane;
public class Hello_World extends Application{
@Override
publicvoid start(Stage primaryStage) throws Exception {
// TODO Auto-generated method stub
Button btn1=new Button("Say, Hello World");
btn1.setOnAction(new EventHandler() {
@Override
publicvoid handle(ActionEvent arg0) {
// TODO Auto-generated method stub
System.out.println("hello world");
}
});
StackPane root=new StackPane();
root.getChildren().add(btn1);
Scene scene=new Scene(root,600,400);
primaryStage.setScene(scene);
primaryStage.setTitle("First JavaFX Application");
primaryStage.show();
}
}
到目前为止,我们已经配置了开发基本JavaFX应用程序所需的所有必要内容,但是该应用程序仍不完整。我们尚未创建主要方法。因此,最后,我们需要创建一个main方法,在其中我们将启动应用程序,即将调用launch()方法并将命令行参数(args)传递给该方法。现在,代码如下所示。
package application;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
import javafx.scene.layout.StackPane;
public class Hello_World extends Application{
@Override
public void start(Stage primaryStage) throws Exception {
// TODO Auto-generated method stub
Button btn1=new Button("Say, Hello World");
btn1.setOnAction(new EventHandler() {
@Override
public void handle(ActionEvent arg0) {
// TODO Auto-generated method stub
System.out.println("hello world");
}
});
StackPane root=new StackPane();
root.getChildren().add(btn1);
Scene scene=new Scene(root,600,400);
primaryStage.setTitle("First JavaFX Application");
primaryStage.setScene(scene);
primaryStage.show();
}
publicstaticvoid main (String[] args)
{
launch(args);
}
}
该应用程序将在屏幕上产生以下输出。