JavaFX CSS 样式文件

news/2024/9/23 9:31:52

前言

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页面下指定即可

img

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 属性

img

id 属性(使用ID选择器)

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

img

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 属性

img

更换应用皮肤

通过切换 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应用。

使用步骤
  1. 导入 Bootstrapfx 依赖包

    <!-- BootstrapFX -->
    <dependency><groupId>org.kordamp.bootstrapfx</groupId><artifactId>bootstrapfx-core</artifactId><version>0.4.0</version>
    </dependency>
    
  2. JavaFX 应用程序设置 BootstrapFX 样式

    scene.getStylesheets().add(BootstrapFX.bootstrapFXStylesheet());
    
  3. 在 FXML 文件中使用 BootstrapFX 样式

      <!-- Button 控件 --><Button text="Submit" fx:id="submitButton" GridPane.columnIndex="4" GridPane.rowIndex="4" styleClass="btn-info"/>
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/46816.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

C++面向对象多级菜单向Arduino的移植

前段时间写了一篇文章《C++面向对象语言自制多级菜单》,文中指出了可以将HeleMenu库进行移植,现已完成技术思路,特此记录。 一、特性 基本与上一篇文章指出的一致,只是将菜单显示和响应函数合二为一 二、代码实现 基本与上一篇文章指出的一致,只是考虑到右值和左值的问题,…

C++U7-10-最小生成树

本节课作业讲解视频: 链接:https://pan.baidu.com/s/1lLlmhShdat9HuJWx7Rp_tA?pwd=0000 提取码:0000最小生成树是一种在无向图中寻找特定结构的算法结果,它具有多种实际应用。以下是关于最小生成树的一些主要应用:网络布局问题:在一个连通加权无向图中,最小生成树算法可…

NSIS 入门教程 (三)

引言在教程的第二部分中,我们为安装程序增加了一个卸载程序,并查看了一些其他的向导页面以及安装部分的选择。第三部分的目标是使安装程序的外观更加现代化。更现代的外观为了给安装程序一个更现代的外观,我们要启用现代用户界面。要提升我们的安装程序(基于“secondinstal…

惠普塔式服务器数据恢复

惠普塔式服务器,5块1000GB的SAS硬盘组成raid5磁盘阵列服务器检测: 硬盘掉线服务器崩溃,其中一块硬盘掉线很久,现又有一块硬盘掉线。 故障分析: 服务器底层数据检测发现数据并没有明显的同步痕迹。将服务器内的硬盘按照顺序编号并贴好标签后取出服务器盘位,对物理硬盘进行…

泓优阁整理的一些轻创业的项目分享

对于当代年轻人来说,除了工作,很多人想去低成本创业,或改善自己的生活,或图谋未来的发展,那么以下一些轻创业项目分享给大家。1,品牌代购 随着经济水平的提高和互联网的普及,代购行业也逐渐成为新的创业热点,它为人们提供了方便的购物服务,也能实现工作之余客观的收入…

IBM服务器数据恢复

服务器数据恢复背景: 一台X3850服务器,这台服务器在运行过程中突然崩溃,服务器崩溃前从未进行过维护,不清楚硬件状况,服务器操作系统为linux,运行oracle数据库。 经检测,初步判定该服务器上共有5块硬盘,其中4块硬盘组成riad5磁盘阵列,1块硬盘位热备盘,其中raid5磁盘阵…

服务器硬盘磁头损坏,盘片划伤数据恢复

服务器硬盘故障: Dell服务器,raid阵列上有一块硬盘出现故障,经过检测发现硬盘问题,后续在无尘台开盘处理,发现盘片损伤严重;初步判断也存在硬件故障。服务器硬盘数据恢复过程: 1、发现开盘的盘面有规则的同心圆状划痕,这是典型的磁头出现故障而划伤盘面的情况,这种情况…

Orleans初体验

Orleans:是一个跨平台框架,用于构建可靠且可缩放的分散式应用。 分布式应用定义为跨多个进程的应用,通常使用对等通信来超越硬件边界。 从单个本地服务器扩展到了云中数千个分布式、高度可用的应用。 将熟悉的概念和 C# 习语扩展到了多服务器环境。 在设计上可弹性缩放。 当…