javaFx发展
从 JDK 11 开始,Oracle 将从 JDK 中删除 JavaFX,但在 2022 年之前,Oracle 还会继续为 JDK 8 中的 JavaFX 提供商业支持。2011 年,JavaFX 成为 Open JDK 的一部分开源,这项技术的发展现在由 OpenFX (国内网站 )社区负责
当然如果是基于高版本的jdk开发, 推荐使用Liberica JDK-不仅包含了 JavaFX,还继续为 Windows 以及 Linux 提供 32 位构建, 下载Full version版本就可以无缝切换
学习javaFx常用布局控件可参考JavaFX Tutorial
为何使用javaFx
跨平台
JavaFX可在Windows、Mac OS X和Linux上运行,利用 JavaFX 能够非常轻松的搭建出在各个平台下体验基本一致的应用,甚至有人还将 JavaFX 移植到安卓上
学习成本低
web方向支持
支持使用Spring Boot管理
javafx-test-with-javapackager
TestOpenJfx14
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| @SpringBootApplication public class MyApplication extends Application {
private ConfigurableApplicationContext springContext;
@Override public void init() { springContext = SpringApplication.run(MyApplication.class); }
@Override public void start(Stage primaryStage) throws Exception { FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/main.fxml")); fxmlLoader.setControllerFactory(springContext::getBean); Parent root = fxmlLoader.load();
primaryStage.setTitle("xxx"); primaryStage.setScene(new Scene(root, 800, 700)); primaryStage.show(); } @Override public void stop(){ springContext.close(); }
public static void main(String[] args) { System.setProperty("java.awt.headless", Boolean.toString(false)); launch(); }
}
public abstract class BaseController implements Initializable {
protected final Logger logger = LoggerFactory.getLogger(getClass());
@Autowired protected ApplicationContext springContext;
public Scene getScene(ActionEvent actionEvent) { return ((Node) actionEvent.getSource()).getScene(); }
public Stage getStage(ActionEvent actionEvent) { Scene scene = getScene(actionEvent); return (Stage) scene.getWindow(); }
public Stage getStage(Node node) { return (Stage) node.getScene().getWindow(); }
public void openController(ActionEvent actionEvent, String fxmlName) throws IOException { Scene scene = getScene(actionEvent); Parent root = FXMLLoader.load(getClass().getResource(fxmlName), null, null, springContext::getBean); scene.setRoot(root); } }
|
示例
支持自动更新
java8使用fxlauncher, java9+使用update4j
1 2
| //bufferedImage转image java11+需引用javafx-swing new ImageView(SwingFXUtils.toFXImage(bufferedImage, null))
|