JavaFx项目

新建完项目,我们的项目有三个文件

Main.java 程序入口类,载入界面并显示

Controller.java 事件处理,与fxml绑定

Sample.fxml 界面

sample.fxml需要通过标签fx:controller定义对应的controller

专业术语

舞台(Stage),场景(Scene),容器(Container),布局(Layout )和控件(Controls)之间的关系

常用容器(布局)Container

可以把容器和布局统一成一个概念

Vbox

相当于垂直方向LinearLayout

Hbox

相当于垂直方向的LinearLayout

FlowPanel

相当于LinearLayout,方向可以定义水平或者垂直,设置水平方向,第一行排满之后,会自动换行排列,设置垂直方向,第一列排满之后,会自动换下一列

BorderPane

上中下左右五个部分

AnchorPane

相当于Android里面的约束布局,比如让某个控件离右边100px,离下边100px

ScrollPane 滑动的布局

GridPane 通常用于这样的布局:第一列上的只读标签的输入表单和第二列上的输入字段,也就是常用的用户名后面加一个输入框

常用控件(Control)

默认的为原生的,JFX前缀则是Jfoenix里面的

文本

label

JFXPasswordField 密码框

JFXTextField 单行输入框

JFXTextArea 多行输入框

按钮

JFXButton

选择框

JFXCheckbox

JFXRadioButton

MenuButton 下拉选择

图片

ImageView

进度条

JFXProcessbar

JFXSlider 水平调节,类似按下音量键出现横线

JFXSpinner 圆圈进度条

开关

JFXToggleButton

列表

JFXListView

菜单

MenuBar 自带有鼠标滑过变色,就像SceneBuilder的菜单栏

Menu

MenuItem

RadioMenuItem 点击之后前面会有√,一列菜单可以有多个,但是只能选择一个RadioMenuItem,RadioMenuItem之间是互斥的,需要使用toggleGroup分为同一组

CheckMenuItem 多选,一列菜单有多个,也可以选多个

ToggleGroup toggleGroup = new ToggleGroup();

RadioMenuItem radioItem1 = new RadioMenuItem("Option 1");

radioItem.setOnAction(new EventHandler() {

@Override public void handle(ActionEvent e) {

System.out.println("radio toggled");

}

});

radioItem1.setToggleGroup(toggleGroup);

RadioMenuItem radioItem2 = new RadioMenuItem("Option 2");

radioItem.setOnAction(new EventHandler() {

@Override public void handle(ActionEvent e) {

System.out.println("radio toggled");

}

});

radioItem2.setToggleGroup(toggleGroup);

- `SeparatorMenuItem` 分割线

**前面需要在添加到MenuBar里面才能使用**

- `SpiltMenuButton` 左边是某个按钮,右边是一个下拉箭头,点击左边,就会实现按钮操作,点击右边,在出现的列表中选择某一项,就可以改变左边按钮

### 使用SceneBuilder生成fxml布局

由于现有的工具不多,只有个界面化的工具,所以就不过多去研究fxml代码部分了。

我们还是弄个用户登录界面上手吧,使用SceneBuilder弄成以下布局

![](https://img2018.cnblogs.com/blog/1210268/201906/1210268-20190602215316145-1614291349.png)

这是我做的界面大体框架,当然,也可以不一样,实现的方法有很多种

![](https://img2018.cnblogs.com/blog/1210268/201906/1210268-20190602215915178-1185379674.png)

主界面里的控件居中显示,相当于Android的布局的gravity属性,设置子布局或者控件的显示

![](https://img2018.cnblogs.com/blog/1210268/201906/1210268-20190602215614853-1230551906.png)

输入框设置提示文字,居中显示

![](https://img2018.cnblogs.com/blog/1210268/201906/1210268-20190602215800265-1106717315.png)

输入框间距

![](https://img2018.cnblogs.com/blog/1210268/201906/1210268-20190602220245623-1877855145.png)

下面的两个Button间距设置同上,设置左边那个注册按钮的右边距即可

### 获取控件实例和控件事件处理

这里,我们给我们需要的控件设置id即可通过id来找到该实例,从而调用实例对象的set方法设置内容或者是get方法获取内容

事件处理的话,我们只需要定义一个方法名,之后再去Controller.java文件实现相关的逻辑

![](https://img2018.cnblogs.com/blog/1210268/201906/1210268-20190602220652676-1429723314.png)

之前我们使用了属性`fx:controller`已经让sample.fxml和controller进行绑定了,我们可以直接让SceneBuilder生成controller的代码

![](https://img2018.cnblogs.com/blog/1210268/201906/1210268-20190602221756286-1512105874.png)

![](https://img2018.cnblogs.com/blog/1210268/201906/1210268-20190602221831357-1444191506.png)

点击登录,提示一个对话框

[封装JFXDialog代码,一行代码即可使用](https://www.cnblogs.com/kexing/p/10989323.html)

//这里,Jfoenix开发团队没有考虑到对话框的创建是要点击之后生成的,demo直接是在Main.java文件里面写的

//我是在issue那里找到了一位外国开发者,直接在controller里面创建对话框显示

//我稍微折腾一下,准备弄个想Android那样,对话框可以由一行代码生成,这里就暂时使用外国开发者代码凑合凑合

//使用的话,如果Stage的宽度不长,对话框显示会不完全,得在Main.java中设置一下

final JFXAlertalert = new JFXAlert<>((Stage) tfPassword.getScene().getWindow());

alert.initModality(Modality.APPLICATION_MODAL);

alert.setOverlayClose(false);

// Create the content of the JFXAlert with JFXDialogLayout

JFXDialogLayout layout = new JFXDialogLayout();

layout.setHeading(new Label("Enter Username"));

layout.setBody(new VBox(new Label("Please enter the username of the person you would like to add.")));

// Buttons get added into the actions section of the layout.

JFXButton addButton = new JFXButton("ADD");

addButton.setButtonType(JFXButton.ButtonType.FLAT);

addButton.setOnAction(new EventHandler() {

public void handle(ActionEvent addEvent) {

// When the button is clicked, we set the result accordingly

alert.setResult("hello");

alert.hideWithAnimation();

}

});

JFXButton cancelButton = new JFXButton("CANCEL");

cancelButton.setCancelButton(true);

cancelButton.setOnAction(new EventHandler() {

public void handle(ActionEvent closeEvent) {

alert.hideWithAnimation();

}

});

layout.setActions(addButton, cancelButton);

alert.setContent(layout);

alert.showAndWait();

### 测试

![](https://img2018.cnblogs.com/blog/1210268/201906/1210268-20190602222521466-1822696998.png)

java 控件内布局_Java开发桌面程序学习(二)————fxml布局与控件学习相关推荐

  1. 【Qt】Qt 开发桌面程序 ( Qt 版本 5.14.2 | 编辑 Qt 桌面按钮控件 | 修改按钮文本 | 为按钮添加点击事件 | 系统调用 | 去掉系统调用命令窗口 )

    文章目录 一.添加按钮控件 二.修改按钮文本 三.为按钮添加点击事件 ( 弹出对话框 ) 四.为按钮添加点击事件 ( 打开记事本 ) 五.为按钮添加点击事件 ( 打开计算器 ) 六.去掉系统调用时弹出 ...

  2. java jdk 1.8 配置_Java开发环境jdk 1.8安装配置方法(Win7 64位系统/windows server 2008)...

    什么是jdk jdk是什么呢?jdk的是java development kit的缩写,意思是java程序开发的工具包.也可以说jdk是java的sdk. 目前的JDK大致分三个大版本: Java S ...

  3. Eclipse RCP开发桌面程序

    所谓RCP,就是Rich Client Platform的缩写,即富客户平台,是Eclipse进化的产物(自3.0版以后出现),是Eclipse组织向用户提供的强大的开放性开发平台,能 够使用户方便地 ...

  4. [转载] flutter开发桌面程序_在开始使用Flutter开发应用程序之前要了解的5条提示

    参考链接: Python中的桌面通知程序 flutter开发桌面程序 1.始终取消您的流订阅: (1. Always cancel your stream subscription:) When I ...

  5. Electron前端开发桌面程序--入门篇

    前言 前端开发桌面程序这个概念已经出现有一段时间了,这项技术也已经走向成熟,Github上nw和光electron的star就差不多有10w颗星了,github也衍生出了很多开源的桌面项目俨然成了一个 ...

  6. 适合开发桌面程序的软件工厂流水线组织结构和流程设计

    开发桌面程序的软件工厂通常需要有一个良好的组织结构和流程设计,以确保项目能够高效地完成并满足质量标准.以下是适合开发桌面程序的软件工厂流水线组织结构和流程设计的建议: 1. 组织结构 软件工厂的组织结 ...

  7. 【Qt】Qt 开发桌面程序 ( Qt 版本 5.14.2 | 创建 Qt 桌面程序 | 构建并运行 Qt 桌面程序 )

    文章目录 一.创建 Qt 桌面程序 二.构建并运行 Qt 桌面程序 一.创建 Qt 桌面程序 首先要安装 Qt 开发环境 , 参考 [Qt]Qt 开发环境安装 ( Qt 版本 5.14.2 | Qt ...

  8. Android开发 入门篇(二) - 常用UI控件

    文章目录 控件 Button TextView EditText ImageView ProgressBar AlertDialog ProgressDialog 布局 LenearLayout an ...

  9. java使用场景什么意思_Java开发中类隐藏及应用场景分析是什么?

    隐藏是JAVA语言平台中提出来的一个新名词.其次在其他语言平台上,也有类似的说法,只是称呼不一样而已.但是隐藏的功能对于应用程序开发来说,特别是大型应用程序设计,非常的有用.作为一名合格的JAVA平台 ...

最新文章

  1. Hadoop JobHistory
  2. linux Figlet 转换字符字
  3. 【ARM】Tiny4412裸板编程之MMU封装
  4. android udp 设备发现,两台Android设备之间进行UDP连接(使用多播地址)~~求大神指点...
  5. openwrt 遍译php_openwrt安装编译
  6. 安卓系统曝漏洞!有人可能正在用你的手机秘密拍照
  7. mysql 删除了授权_mysql用户授权访问与删除授权
  8. mysql 5.6 2002_MySQL错误ERROR 2002 (HY000): Can't connect to local MySQL server
  9. 1.5.PHP7.1 狐教程-(PHP开发工具 PHPStorm 配置)
  10. wxwindows qt
  11. 树莓派 引脚及接口图 AV接口顺序
  12. c语言数字黑洞123问题,求助:数字黑洞效率问题
  13. 海内存知己,天涯若比邻
  14. c语言编写51单片机中断程序,执行过程是怎样的?
  15. 入网许可证_入网许可证真伪鉴别
  16. android 吧文字读出来,android学习之文字语音朗读
  17. 长安链ChainMaker的多链隔离设计
  18. 【CSDN问答】使用体验、产品BUG和改进建议
  19. 考研英语近义词与反义词·十一
  20. 银行客户信用风险评估项目

热门文章

  1. css dl图片布局,经典图文列表以及CSS布局切换
  2. linux磁盘分配方案,安装Linux系统磁盘分配方案.doc
  3. elasticsearch学习之路---Linux 下安装并启动elasticsearch
  4. shell 脚本定时创建月份表
  5. 软件工程白盒测试的流图怎么画_功能安全理论 | 黑盒 与 白盒
  6. Mysql 参数最佳实践_MySQL参数调优最佳实践
  7. 我的世界服务器修改飞行速度,《我的世界》创造模式飞行速度修改方法介绍
  8. GitHub访问越来越慢了,怎么办?
  9. 死磕18个Java 8的日期处理,工作必用!
  10. 面试:Redis新版本开始引入多线程,谈谈你的看法?