The previous articles introduced the basic knowledge of JavaFX, and also mentioned that JavaFX can develop client desktop applications. This article added two buttons to the above simple functions, which can display and hide new window s according to the buttons.
Code structure
liumiaocn:JavaFXButton liumiao$ ls pom.xml src liumiaocn:JavaFXButton liumiao$ tree . . ├── pom.xml └── src └── main ├── java │ └── com │ └── liumiaocn │ └── javademo │ └── Main.java └── resources 7 directories, 2 files liumiaocn:JavaFXButton liumiao$
For simplicity, there are only two files left, one pom.xml file and one Main.java file
pom.xml
The contents of pom.xml file are as follows. For details, please refer to:
liumiaocn:JavaFXButton liumiao$ cat pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.liumiaocn</groupId> <artifactId>javademo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>javafxdemo</name> <description>JavaFX demo project</description> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.1.1</version> <configuration> <archive> <manifest> <mainClass>com.liumiaocn.javademo.Main</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build> </project> liumiaocn:JavaFXButton liumiao$
Main.java
liumiaocn:JavaFXButton liumiao$ cat src/main/java/com/liumiaocn/javademo/Main.java package com.liumiaocn.javademo; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.layout.HBox; import javafx.stage.Stage; public class Main extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) throws Exception { final Stage window = new Stage(); window.setX(40); Scene innerScene = new Scene(new Label("Show or Hide Me"),200,100); window.setScene(innerScene); window.setTitle("Show/Hide Window"); HBox root = new HBox(200d); Button showButton = new Button("Show Window"); showButton.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { window.show(); } }); Button hideButton = new Button("Hide Window"); hideButton.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { window.hide(); } }); root.getChildren().add(showButton); root.getChildren().add(hideButton); primaryStage.setTitle("Hello LiuMiao"); primaryStage.setScene(new Scene(root,600,600)); primaryStage.show(); } } liumiaocn:JavaFXButton liumiao$
Execute build and generate jar file
liumiaocn:JavaFXButton liumiao$ pwd /Users/liumiao/easypack/containers/alpine/maven/demo/JavaFXButton liumiaocn:JavaFXButton liumiao$ mvn clean package [INFO] Scanning for projects... [INFO] [INFO] -----------------------< com.liumiaocn:javademo >----------------------- [INFO] Building javafxdemo 0.0.1-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ javademo --- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ javademo --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ javademo --- [INFO] Changes detected - recompiling the module! [WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent! [INFO] Compiling 1 source file to /Users/liumiao/easypack/containers/alpine/maven/demo/JavaFXButton/target/classes [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ javademo --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory /Users/liumiao/easypack/containers/alpine/maven/demo/JavaFXButton/src/test/resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ javademo --- [INFO] No sources to compile [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ javademo --- [INFO] No tests to run. [INFO] [INFO] --- maven-jar-plugin:3.1.1:jar (default-jar) @ javademo --- [INFO] Building jar: /Users/liumiao/easypack/containers/alpine/maven/demo/JavaFXButton/target/javademo-0.0.1-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.474 s [INFO] Finished at: 2019-05-03T21:28:28+08:00 [INFO] ------------------------------------------------------------------------ liumiaocn:JavaFXButton liumiao$
Result confirmation
Using java jar to run the program
liumiaocn:JavaFXButton liumiao$ java -jar target/javademo-0.0.1-SNAPSHOT.jar
Click Show Window to display a new window, and click Hide Window to hide this window
Of course, you can also use maven container to build. For details, please refer to the following article