GUI之JavaFX
一、JavaFX不深究系列,目的只是为了尝试使用GUI的方式来生成桌面应用。
二、JavaFX是一个强大的图形和多媒体处理工具包集合,它允许开发者来设计、创建、测试、调试和部署富客户端程序,并且和Java一样跨平台。说白了就是利用Java的跨平台关系,做了一个图形处理工具。
三、详细学习可以参考:http://www.javafxchina.net/main/东西很多,不建议深究。
四、来点基本案例:
1)HelloWorld
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage; public class HelloWorld extends Application{ public void start(Stage primaryStage) throws Exception {
//按钮绑定事件
Button button = new Button();
button.setText("hello world");
button.setOnAction(event -> System.out.println("hello world!!!")); StackPane stackPane = new StackPane();
stackPane.getChildren().add(button);
//大小
Scene scene = new Scene(stackPane, 300, 500); //设置显示
primaryStage.setTitle("Hello World");
primaryStage.setScene(scene);
primaryStage.show();
} public static void main(String[] args) {
launch(args);
}
}

2)复杂一点,Login
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage; public class Login extends Application{ public void start(Stage primaryStage) throws Exception { GridPane gridPane = new GridPane();
gridPane.setAlignment(Pos.CENTER);
gridPane.setHgap(10);
gridPane.setVgap(10);
// gridPane.setPadding(new Insets(25, 25, 25, 25)); Text welcome = new Text("Welcome");
welcome.setFont(Font.font("Tahoma", FontWeight.BOLD, 20));
welcome.setId("welcome");
gridPane.add(welcome, 0, 0, 2, 1); Label username = new Label("UserName:");
gridPane.add(username, 0, 1); Label password = new Label("Password:");
gridPane.add(password, 0, 2); TextField userNameText = new TextField();
gridPane.add(userNameText, 1, 1); TextField passwordText = new TextField();
gridPane.add(passwordText, 1, 2); //一个按钮Node
Button button = new Button("Login");
//一层box,子元素按设置的10排列
HBox hBox = new HBox(10);
hBox.setAlignment(Pos.BASELINE_RIGHT);
hBox.getChildren().add(button);
gridPane.add(hBox, 1, 4); final Text text = new Text();
gridPane.add(text, 0, 4, 2, 1); button.setOnAction(event -> {
text.setFill(Color.RED);
text.setText("login button pressed");
}); Scene scene = new Scene(gridPane, 400, 300);
primaryStage.setTitle("Login");
primaryStage.setScene(scene);
scene.getStylesheets().add(Thread.currentThread().getContextClassLoader().getResource("example/css/login.css").toExternalForm());
primaryStage.show();
} public static void main(String[] args) {
launch(args);
}
}

3)Fxml的写法
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage; public class LoginFxml extends Application{ public void start(Stage primaryStage) throws Exception {
Parent load = FXMLLoader.load(Thread.currentThread().getContextClassLoader().getResource("example/fxml/login.fxml"));
Scene scene = new Scene(load, 400, 300);
scene.getStylesheets().add(Thread.currentThread().getContextClassLoader().getResource("example/css/login.css").toExternalForm());
primaryStage.setTitle("Login Fxml");
primaryStage.setScene(scene);
primaryStage.show();
} public static void main(String[] args) {
launch(args);
} }
<?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?> <?import javafx.geometry.Insets?>
<?import javafx.scene.text.Text?>
<GridPane xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="com.cetc.example.LoginController"
hgap="10" vgap="10" alignment="CENTER">
<padding>
<Insets left="25" right="25" top="25" bottom="25"/>
</padding> <Text
fx:id="welcome"
text="Welcome"
GridPane.columnIndex="0"
GridPane.rowIndex="0"
GridPane.columnSpan="2"/>
<Label
text="UserName"
GridPane.columnIndex="0"
GridPane.rowIndex="1"/>
<TextField
GridPane.columnIndex="1"
GridPane.rowIndex="1"/>
<Label
text="Password"
GridPane.columnIndex="0"
GridPane.rowIndex="2"/>
<TextField
GridPane.columnIndex="1"
GridPane.rowIndex="2"/>
<HBox alignment="BOTTOM_RIGHT" GridPane.columnIndex="1" GridPane.rowIndex="4">
<Button text="Login" onAction="#loginHandler"/>
</HBox>
<Text GridPane.columnIndex="0" GridPane.rowIndex="4" GridPane.columnSpan="2" fx:id="loginView"/>
</GridPane>
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.paint.Color;
import javafx.scene.text.Text; public class LoginController{ @FXML
private Text loginView; @FXML
private void loginHandler(ActionEvent activeEvent) {
loginView.setFill(Color.RED);
loginView.setText("login button pressed");
} }
五、上面是不是感觉特你妈复杂,html写着不好吗。所以html的写法才是最正确的写法,主要是方便
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage; public class WebApplication extends Application { public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Browser");
Scene scene = new Scene(new Browser(), 900, 900);
primaryStage.setScene(scene);
primaryStage.show();
} public static void main(String[] args) {
launch(args);
}
}
注意:这里的方式采用的是浏览器的方式。
import javafx.application.Platform;
import javafx.geometry.HPos;
import javafx.geometry.VPos;
import javafx.scene.layout.Region;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView; public class Browser extends Region { private WebView webView = new WebView();
private WebEngine webEngine = webView.getEngine(); public Browser() { Platform.runLater(() -> {
webEngine.load(Thread.currentThread().getContextClassLoader().getResource("browser/index.html").toExternalForm());
});
getChildren().add(webView);
} @Override
protected void layoutChildren() {
layoutInArea(webView, 0, 0, getWidth(), getHeight(), 0, HPos.CENTER, VPos.CENTER);
} @Override
protected double computePrefWidth(double height) {
return 900;
} @Override
protected double computePrefHeight(double width) {
return 900;
}
}
说明:这里的加载方式只能是静态页面的方式!当然可以加载已经部署好的web页面,不过那样就没啥意义了。
最后写了一个html的例子,简单这里不弄源码了


六、此篇源码地址:https://github.com/lilin409546297/JavaFX
七:请参考官网学习地址:http://www.javafxchina.net/main/
GUI之JavaFX的更多相关文章
- Atitit 桌面软件跨平台gui解决方案 javafx webview
Atitit 桌面软件跨平台gui解决方案 javafx webview 1.1. 双向js交互1 1.2. 新弹出窗口解决1 1.3. 3.文档对象入口dom解析1 1.4. 所以果断JavaFX, ...
- 结对作业:四则运算(Java+JavaFX)
一.简介 此程序是一个可自动生成,计算小学四则运算题目的项目. Github地址:https://github.com/czmDeRepository/SoftwareWork/tree/master ...
- Java的GUI框架如何选择? Swing、SWT、AWT、SwingX、JGoodies、JavaFX、Apache Pivot、BeautyEye框架(美观)?
AWT 是swing的基础,运行良好,但缺少高级组件.如果您打算创建丰富的应用程序,那么AWT可能不是最好的方法.但是对于不需要丰富用户界面的较小gui应用程序来说.这可能非常适合,因为它是一个久经考 ...
- JavaFX結合 JDBC, Servlet, Swing, Google Map及動態產生比例圖 (2):JavaFX建立及程式碼說明 (转帖)
說明:就如同標題一樣,前端會用到JavaFX.Swing.Java Web Start.Google Map 的技術, 後端就是JDBC.Servlet的技術,以及我們會簽署認證jar檔案,這樣才可存 ...
- java系列: 对不起,JavaFX——Java 8目前还不能救你(zz)
JavaFX 是SUN公司在2007年JavaOne大会上首次对外公布的以Java为基础构建的富客户端平台,更让开发者印象比较深刻的则是其背后的JavaFX开发团队,仅仅在两年的时间就从1.0版本完善 ...
- 写在学习Java GUI之前
Java GUI就是用Java语言开发桌面应用,而Java又有三个Java GUI库,分别为AWT,Swing和SWT/JFace. 现在要学的是Swing库. 后记:开发桌面应用,不止一种技术,现在 ...
- JavaFX 2 Dialogs
http://edu.makery.ch/blog/2012/10/30/javafx-2-dialogs/ ———————————————————————————————————————————— ...
- javaFX的控制台实现
最近做了个javaFX的工具,想弄个控制台输出信息,准备用TextArea来模拟console,但直接操纵console对象的话不依赖这个项目的地方就无法输出信息到控制台了,至于log,以前弄过一个输 ...
- JavaFX - 富互联网应用
JavaFX教程™ --必看https://www.yiibai.com/javafx /================= 富互联网应用 是那些提供与Web应用程序类似的功能,并可作为桌面应用程序体 ...
随机推荐
- Python小白入门题一——文件增删改
题目描述:用python对文件进行增(创建一个文件).删(删除一个文件).改(重命名)操作. 说明:新建了一个文件夹files存放新增的两个文件,随后这两个文件被批量重命名成“数字.txt”,之后这两 ...
- mplayer使用心得[转]
一直在用mplayer,其他的播放器很少用.以下是我使用过程中的一些心得. 注意,下面用的路径都是在我的电脑上的路径,使用时请不要照抄!应该换成你的电脑上的正确路径. 一.首先还是讲安装方面的问题 ...
- Sopus库中FindEigen3.cmake内容详解笔记
FindEigen3.cmake: # - Try to find Eigen3 lib # Once done this will define # # EIGEN3_FOUND - system ...
- 部署 harbor 私有仓库
安装下载依赖包 安装docker-compose 从 docker compose 发布页面下载最新的 docker-compose 二进制文件,本文以1.25.4为例 cd /opt/k8s/wor ...
- for实例
#-*- coding:utf-8 *-* salary = 5000 shop_list = [('iphone',9000),('mac book',10000),('python book',9 ...
- web开发发展历程
cs架构:(软件主要运行在桌面上,数据库软件运行在服务器端) 缺点:如果web应用修改或升级,需要每个客户端逐个升级桌面App,因此Browser/server模式开始流行. bs架构:应用程序的逻辑 ...
- BZOJ 2434 阿狸的打字机(ac自动机+dfs序+树状数组)
题意 给你一些串,还有一些询问 问你第x个串在第y个串中出现了多少次 思路 对这些串建ac自动机 根据fail树的性质:若x节点是trie中root到t任意一个节点的fail树的祖先,那么x一定是y的 ...
- 12306 抢票系列之只要搞定RAIL_DEVICEID的来源,从此抢票不再掉线(上)
郑重声明: 本文仅供学习使用,禁止用于非法用途,否则后果自负,如有侵权,烦请告知删除,谢谢合作! 开篇明义 本文针对自主开发的抢票脚本在抢票过程中常常遇到的请求无效等问题,简单分析了 12306 网站 ...
- 20200221--python学习第14天
今日内容 带参数的装饰器:flash框架+django缓存+写装饰器实现被装饰的函数要执行N次 模块: os sys time datetime和timezone[了解] 内容回顾与补充 1.函数 写 ...
- UI自动化框架搭建
1.目录结构 大概分为以下几个文件 common :主要是用来放一些封装的公共函数 outputs :主要是输出一些文件,失败截图.用例执行完的测试报告 pagelocate :主要是元素的定位 pa ...