按照现在搜索情况,网络上关于JavaFx的教程少的一比,而且大部分还他喵的是英文版的,我现在也是只能边学边写感悟。如果有不全错误的地方还请大家见谅。
首先是对JavaFX的介绍,javaFx是一个非常强大的图形和多媒体处理工具包集合, 同时能够跨平台使用。通俗点来说就是JavaFx就是用来写客户端的,并且和Java的特性一样,一次编译到处乱窜。这里使用的是jdk1,8版本的。
Javafx有两种写法:一种是使用fxml文件,将事件和对场景描述分开,好处明显的自然而然:将逻辑功能和界面分开,使程序更加的清晰,但是最后连接的时候容易出问题。今天写的是另外一种方法:将界面和事件写到一块,虽然看起来很麻烦,但是不容易出问题。只是写完之后的代码麻烦到连你自己都不愿意看。
这里的javafx主要是继承了application这个类,是以Stage作为基石,即有舞台的意思,所有的功能都会在这个舞台上展现出来。现在先拿一串最简单的代码进行分析。
package application.fx17823; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class FxTest1 extends Application { @Override public void start(Stage primaryStage) throws Exception { // TODO Auto-generated method stub Button button = new Button(); //创建按钮 button.setText("Say'Hello World!!!'"); //给按钮命名 button.setOnAction(new EventHandler<ActionEvent>() { //给按钮连接事件 注意写法(重点) @Override public void handle(ActionEvent event) { // TODO Auto-generated method stub System.out.println("我就不说hello world!"); } }); StackPane root = new StackPane(); //堆栈面板布局 注意stackPane root.getChildren().add(button); //把按钮加在面板上
Scene scene = new Scene(root,300,250); //设定大小 primaryStage.setTitle("你好"); //设定展示的场景舞台
primaryStage.setScene(scene); //设定场景的大小 primaryStage.show(); //舞台展示 } public static void main(String[] args){ launch(args); } }
JavaFx应用程序主要继承的是application.Application类,其中所对应的Start方法是所有JavaFx程序的入口。
Java Fx的应用程序将UI容器定义为舞台(Stage)和场景(Scene),stage是JavaFx*的容器,scene是所有内容的容器。所以最后scene还得放在stage里
在JavaFX中,Scene中的内容会以由图形节点(Node)构成的分层场景图(Scene Graph)来展现。在本例中,root节点是一个StackPane对象,它是一个可以调整大小的layout节点。这就意味着在用户改变stage大小时,root节点可以随scene的大小变化而变化。
当JavaFX应用程序是通过JavaFX Packager工具打包时,main()方法就不是必需的的了,因为JavaFX Package工具会将JavaFX Launcher嵌入到JAR文件中。但是保留main()方法还是很有用的,这样你可以运行不带有JavaFX Launcher的JAR文件,例如在使用某些没有将JavaFX工具完全集成进去的IDE时。另外嵌入了JavaFX代码的Swing应用程序仍需要main()方法。意思就是在eclipse里还得把launch给写上用来运行,如果是一切都包装好了,就不用写了。
root节点包含一个带文本的按钮子节点,按钮上添加了一个事件处理器(Event Handler),它在点击按钮时会向控制台输出信息。
运转效果如下图所示: