JavaFX CSS 样式文件
前言
JavaFX 使用 CSS 文件来修饰 GUI 的外观,JavaFX 的 CSS 样式基于 W3C CSS 的 2.1 版本,JavaFX 的 CSS 语法和 HTML 的 CSS 语法一样。
CSS 语法
CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明。每条声明由一个属性和一个值组成。
selector {property: value}
举例如下
h1 {
-fx-color:red;
-fx-font-size:14px;
}
JavaFX 的选择器
1. 类型选择器(type selector)
类型选择器事实上是控件类选择器,针对每种控件,如 Button,Label 等。
使用类型选择器,控制该类型控件的外观
其对应的命名规则为将 JavaFX 的类名成首字母小写,如果是由多个单词拼接的类名,将每个单词原来大写的首字母小写然后用连字符将多个单词连接。
JavaFX Class CSS type class Button button Label label CheckBox check-box TextField text-field
举例如下
.button {
-fx-background-color: blue;
}
2. 类选择器(class selector)
不针对单一控件,一个类选择器可以应用到多个控件。
- 类选择器允许以一种独立于文档元素的方式来指定样式
- 使用时必须指定每个实例的
styleClass属性。才能使用这些选择器 - 简单来说类型选择器针对类,类选择器针对实例
举例如下
.font-large {
-fx-font-size: 16pt;
}
3. ID选择器(id selector)
针对标有特定 id的控件
- 一般情况下一个 ID 选择器对应这唯一的一个控件。
举例如下
#lbl-title {
-fx-font-color: red;
-fx-font-size: 20px;
-fx-font-weight: bolder;
}
4. 伪类选择器
针对控件的不同状态所定义的样式。如控件选择状态、点击状态、鼠标在控件上面等。
| 状态 | 描述 |
|---|---|
| :disabled | 表示元素被禁用的状态 |
| :focused | 表示元素获得了焦点的状态 |
| :hover | 表示鼠标悬停在元素上的状态 |
| :pressed | 表示元素被按下的状态 |
举例如下
.button:hover {
-fx-background-color: green;
}
5. 后代选择器
后代选择器(descendant selector)又称为包含选择器。
- 后代选择器可以选择作为某元素后代的元素。
- 如下例子表示选择h1 元素中的 em 元素
举例如下
h1 em {
-fx-color:red;
}
6. 子元素选择器
如果不希望选择任意的后代元素,而是希望缩小范围,只选择某个元素的子元素,请使用子元素选择器(Child selector)。
举例如下
只选择作为 h1 元素子元素的 strong 元素,可以这样写:
h1 > strong {
-fx-color:red;
}
7. 组合选择器
组合选择器可以同时选定多个选择器。所有的选择器分享相同的声明。用逗号将需要组合的选择器分开。
举例如下
VBox,Button {
-fx-background-color: lightgray;
}
属性声明的规则
命名规则是以 -fx 开头,然后连接该类的属性,属性名称的单词首字母小写,然后用连字符连接拼接的属性单词。
比如-fx-background-color对应着 Button 的 backgroundColor 属性
.button {
-fx-background-color: blue;
}
常用属性
.label {
-fx-background-color: blue;
-fx-font-size: 11pt;
-fx-font-family: "Segoe UI Semibold";
-fx-text-fill: white;
-fx-opacity: 0.6;
}
CSS文件 的使用
css 文件是指定给 JavaFX 的控件的。这个控件的所有子控件都能应用这个 CSS 文件。这个控件的父控件和平级控件不能应用。所以指定 css 文件事实上是给控件的Stylesheets属性赋值。
Scene 加载 CSS 文件
FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("hello-view.fxml"));
Scene scene = new Scene(fxmlLoader.load(), 320, 240);
scene.getStylesheets().add(this.getClass().getResource("/css/style.css").toExternalForm());
stage.setTitle("Hello!");
stage.setScene(scene);
stage.show();
3. JavaFX Scene Builder工具中指定 CSS 文件
选择控件后,在左边的Properties页面下指定即可
styleClass 属性赋值(使用类选择器)
1. 在代码使用设置 styleClass 属性
getStyleClass().add("font-large") //会自动应用css样式。。自动生效
2. 在 FXML 文件中设置 styleClass 属性
<!--单一styleClass属性-->
<GridPane styleClass="background"/>
<!--多个styleClass属性-->
<GridPane">
<styleClass>
<String fx:value="background" />
<String fx:value="label-bright" />
</styleClass>
</GridPane>
3. 在 JavaFX Scene Builder 工具中设置 styleClass 属性

id 属性(使用ID选择器)
1. 在代码中设置 id 属性
//只能指定单一ID
root.setID();
2. 在 FXML 中设置 id 属性
<GridPane id="aaa" />
3. 在 JavaFX Scene Builder 工具中设置 id 属性

style属性使用
1. 在代码中设置 style 属性
label.setStyle("-fx-font-size: 24px;");
2. 在 FXML 中设置 style 属性
<Button>
style="-fx-min-height: 30; -fx-min-width: 80;-fx-background-color: #337ab7;">
</Button>
注意:该属性完全可以用 css 文件和 id 选择器代替。
3. 在 JavaFX Scene Builder 工具中设置 style 属性

更换应用皮肤
通过切换 css 文件可以使用更换应用皮肤
primaryStage.getScene().getStylesheets().clear(); //清除后,会取消所有显示外观
File cssFile = new File("css/" + cssFilePath);
primaryStage.getScene().getStylesheets().add(cssFile.toURI().toString());//调用add方法后,会自动应用css
第三方外观框架
在实际开发中,可以使用现有的第三方开源框架来美化 JavaFX 应用。
这里推荐两个JavaFX CSS开源框架:
- bootstrapfx (MIT协议)
- jbootx (没有声明开源协议)。
Bootstrapfx 框架
官网地址:https://gitee.com/tju_xiaoyong/bootstrapfx/
BootstrapFX是一个开源项目,它将流行的前端框架 Bootstrap 与强大的 JavaFX 结合在一起,为Java开发者提供了一种更简洁、直观的方式来构建桌面应用程序。
通过这个项目,你可以利用Bootstrap的优美设计和响应式布局,打造具有现代感和跨平台兼容性的JavaFX应用。
使用步骤
导入 Bootstrapfx 依赖包
<!-- BootstrapFX -->
<dependency>
<groupId>org.kordamp.bootstrapfx</groupId>
<artifactId>bootstrapfx-core</artifactId>
<version>0.4.0</version>
</dependency>
JavaFX 应用程序设置 BootstrapFX 样式
scene.getStylesheets().add(BootstrapFX.bootstrapFXStylesheet());
在 FXML 文件中使用 BootstrapFX 样式
<!-- Button 控件 -->
<Button text="Submit" fx:id="submitButton" GridPane.columnIndex="4" GridPane.rowIndex="4"
styleClass="btn-info"/>
JavaFX CSS 样式文件的更多相关文章
- Yii2 assets注册的css样式文件没有加载
准备引入layui.css文件的,在LayuiAssets类中已经配置了资源属性 <?php namespace frontend\assets; use yii\web\AssetBundle ...
- 模板文件引入css样式文件
引用路径问题:相对路径和绝对路径 相对路径:相对路口文件index.php设置 绝对路径:从虚拟主机站点目录开始设置 css样式文件引入图片,路径的设置 相对地址:相对css文件本身设置 ①模板文件 ...
- Django admin模块无法调用css样式文件
在使用Django Admin开发时,发现admin模块css样式文件丢失,无法调用,使火狐浏览器提示: 此 URL 的资源不是文本: http://127.0.0.1:8000/statics/ad ...
- 动态为页面添加CSS样式文件引用
动态为页面添加CSS样式文件引用: if (document.createStyleSheet) { //IE document.createStyleSheet("./Themes/Def ...
- wap开发使用jquery mobile之后页面不加载外部css样式文件/js文件
场景: wap开发,使用jquery mobile之后不会加载外部自定义的css文件了,需要手动刷新才会加载,查看外部自定义的js文件也是一样. 解决办法: 1.在page下面添加css样式,就不要写 ...
- 关于Vue-cli 组件引入CSS样式文件
在 Vue-cli 组件 .vue 文件中引入 css 样式表出错 由于使用Vue-cli后, 引入css 样式表 不需要 多余../../ 之类路径 现在写法也发生了改变 <style ...
- ASP.NET重写Render 加载CSS样式文件和JS文件(切换CSS换皮肤)
网页换皮肤的方式有很多种,最简单的通常就是切换页面CSS,而CSS通常写在外部CSS文件里.那么切换CSS其实就是更换html里的link href路径.我在网上搜索了下. 一般有两种方式: 1.页面 ...
- css样式文件命名规范
样式文件命名规范 主要 master.css, style.css, main.css 布局 layout.css 专栏 columns.css 文字 font.css 打印 print.css 主题 ...
- 解决下载的css样式文件在同一排的问题
一.将样式文件里的所有内容复制到word里 Ctrl+F查找替换,将所有分号;替换成;^p 小提示:在word里^p表示回车 二.将央视文件里的所有反括号}进行替换替换成}^p然后将代码整个粘贴回样式 ...
- 网站引入了css样式文件能访问,就是没有效果
今天后端的同事遇到这么个问题,引入了外部css文件也能访问,就是页面上没有效果. 大概是下面这个样子: css引入如下: 我非常的纳闷,说真的我还没遇到过这种情况,UI是可以运行的,一点事都没有... ...
随机推荐
- VS2019+CUDA12.5入门
通常先装vs后装cuda,cuda会自动集成到vs中.而如果先装cuda,后装vs则需要进行额外的配置. 1 VS新建项目中增加CUDA选项 1.1 关闭vs2019(如果已经打开)1.2 检查CUD ...
- 数栈UI5.0设计实战|B端表单这样设计,不仅美观还提效
表单是B端产品中最常见的组件之一,主要⽤于数据收集.校验和提交.比如登陆流程的账号密码填写,注册流程的邮箱.用户名等信息填写,都是表单应用的常见案例,在数栈产品中也是出现频率⾮常⾼的组件. 尽管表单应 ...
- .Net 9.0环境下WebApi发布到IIS
一.在Visual Studio里发布 右键点击WebApi工程,点击发布按钮,如下图所示. 点击[发布]按钮后,系统弹出发布对话框,如下图所示. 选择文件夹,点击[下一步]. 在该界面选择发布输出的 ...
- jupyter notebook中使用pytorch
jupyter notebook中使用pytorch 1.问题 在使用pytorch时,使用jupyter notebook无法调用,也没有可以调整更改的环境 错误提示:No module named ...
- Vue 结合Sortablejs实现table行排序
场景 在一个列表展示页面上,使用了表格组件,原有组件本身不支持拖拽功能,需求要求在列表的基础上支持行拖拽排序.因此引入了Sortablejs插件. 问题及解决方案 引入Sortablejs后刚开始都很 ...
- pg 多列合并一列
下面是正常的查询多条数据,如果我要合并成列怎么办. 其实pg有自带的array_to_string函数 ,但是写法稍微有点麻烦,但是可以根据array_to_string函数自定义一个函数去简化写 ...
- Solon AI & MCP v3.3.3 发布
Solon AI Solon AI ,是 Solon 官方推出的 Java AI 应用开发框架.旨在为 Java 开发者提供统一的接口抽象层,简化与 OpenAI.DeepSeek.QWen 等主流 ...
- Python全栈应用开发利器Dash 3.x新版本介绍(3)
更多Dash应用开发干货知识.案例,欢迎关注"玩转Dash"微信公众号 大家好我是费老师,在前两期文章中,我们针对Python生态中强大且灵活的全栈应用开发框架Dash,介绍了其3 ...
- 前端开发系列080-Node篇之cnpm
本文输出Node中另一款包管理工具CNPM相关的内容,包括基本情况和简单使用. 一.简单介绍 CNPM是阿里的Node团队开发的一款NPM工具,由蚂蚁金服Node技术专家苏千(袁锋·Node技术专家) ...
- 远程创建的git仓库,第一次与本地仓库进行联动,需要强制推送。
简介 远程创建的git仓库,第一次与本地仓库进行联动,需要强制推送. 参考链接 cnblog