首页 > 编程语言 >如何在JavaFX中使用CSS

如何在JavaFX中使用CSS

时间:2023-06-01 10:13:56浏览次数:42  
标签:fx JavaFX scene label 如何 add Label CSS

如何在JavaFX中使用CSS

CSS用于定制用户界面的显示样式。JavaFX 也可以通过 css 文件来支持 CSS 。

对于 JavaFX 中的元素,有的会有默认的规则,我们对这个规则设置 CSS 样式,就可以修改其关联的元素的显示效果。

比如,Label 控件关联的规则名是 .label ,如果我们在 CSS 文件中加入:

.label {
    -fx-text-fill: #F0FFFF;
}

那么所有 Label 默认会应用这种样式。

.root 规则对应的是根节点的样式,其某些设置会影响到子节点。比如:

.root {
    -fx-background-color: #383838;
    -fx-font-size: 24
}
  • -fx-background-color: #383838; 这句话设置了场景的背景颜色。

  • -fx-font-size: 24 这句话设置了子节点的字体大小。

我们也可以自定义规则,然后应用。

效果展示

下面是一个使用了 CSS 样式的显示展示:

image

示例代码

CSS 文件代码:

.root {
    -fx-background-color: #383838;
    -fx-font-size: 24
}

.label {
    -fx-text-fill: #F0FFFF;
}

.label-blue {
    -fx-text-fill: #6495ED;
}

#label-bold {
    -fx-font-weight: bold;
}

Java 文件代码:

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class CSSExample extends Application
{
    @Override
    public void start(Stage window) throws Exception
    {
        VBox vBox = new VBox();
        vBox.setPadding(new Insets(10));
        vBox.setSpacing(10);

        Label label = new Label("Label");
        vBox.getChildren().add(label);

        Label labelBlue = new Label("Label Blue");
        labelBlue.getStyleClass().add("label-blue");
        vBox.getChildren().add(labelBlue);

        Label labelBold = new Label("Label Bold");
        labelBold.setId("label-bold");
        vBox.getChildren().add(labelBold);

        Label labelRed = new Label("Label Red");
        labelRed.setStyle("-fx-text-fill: #A52A2A");
        vBox.getChildren().add(labelRed);

        Scene scene = new Scene(vBox);
        scene.getStylesheets().add("cssexample.css");

        window.setScene(scene);
        window.setTitle(this.getClass().getSimpleName());
        window.show();
    }

    public static void main(String[] args)
    {
        launch(args);
    }
}

代码说明

  • 我们使用 scene.getStylesheets().add("cssexample.css"); 加载 CSS 文件,从而得到CSS规则的设定
  • labelBlue.getStyleClass().add("label-blue"); 这句话使用了自定义的规则 label-blue 中的设定来替代默认设定 (同时保留其他样式)
  • labelBold.setId("label-bold"); 这句话同样也是使用自定义的规则 label-bold 的设定来替代默认设定 (同时保留其他样式)
  • labelRed.setStyle("-fx-text-fill: #A52A2A"); 这句话将规则写入代码中,从而代替默认设定(同时保留其他样式)

总结

有三种方式来设定 CSS 样式:

  1. 不使用CSS文件,而是将样式写入代码,通过调用 setStyle来设置
  2. 使用 CSS 文件来设定默认规则
  3. 使用 CSS 文件来新建规则,然后在代码里使用 setId 或 getStyleClass().add 来修改默认设定

标签:fx,JavaFX,scene,label,如何,add,Label,CSS
From: https://www.cnblogs.com/javafx-howto/p/17448134.html

相关文章

  • 如何绑定Property以实现控件属性同步
    如何绑定Property以实现控件属性同步控件的属性往往是各种Property,比如StringProperty,IntegerProperty。它们有着特殊的性质:可以在其上添加一个监听函数,在属性发生变化时自动调用可以绑定另一个Property,从而同步变更效果展示示例代码importjavafx.application.A......
  • 如何定制buildroot文件系统-基于TQ3568开发板
    在日常开发中,经常需要添加应用软件以及自定义的文件来辅助我们开发。因为buildroot不支持apt-get命令,我们需要通过makemenuconfig配置bulidroot文件系统来安装应用。本文档以搭建开发板NFS环境为例,描述如何在buildroot文件系统中添加应用软件。Buildroot添加应用配置开发板NFS服务......
  • 如何在Java中创建数组列表
    为了在Java中存储动态大小的元素,我们使用了ArrayList。每当添加新元素时,它会自动增加其大小。ArrayList实现Java的List接口和Java的Collection的一部分。由于其功能和灵活性,它被广泛使用。ArrayList的关键点An ArrayList是一个可调整大小的数组,也称为动态数组。它根据新元素增加其......
  • 如何使用CheckMenuItem添加可选菜单项
    如何使用CheckMenuItem添加可选菜单项CheckMenuItem也是一种菜单项目,类似CheckBox,拥有可选状态。CheckMenuItem可以添加到菜单中。效果展示示例代码importjavafx.application.Application;importjavafx.scene.Scene;importjavafx.scene.control.CheckMenuItem;imp......
  • 如何基于G6进行双树流转绘制?
    1.背景业务背景:CRM系统随着各业务条线对线索精细化分配的诉求逐渐增加,各个条线的流向规则会越来越复杂,各个条线甚至整个CRM的线索流转规则急需一种树形的可视化的图来表达。技术背景:在开发之前考虑了三种方案,原生canvas、fabric以及G6,三种方案各有优劣势原生canvas......
  • 如何使用RadioMenuItem添加单选菜单项
    如何使用RadioMenuItem添加单选菜单项几个RadioMenuItem可以组成一个组合,组合中只能有一个菜单条目被选择。效果展示示例代码importjavafx.application.Application;importjavafx.scene.Scene;importjavafx.scene.control.Menu;importjavafx.scene.control.MenuBar;......
  • 如何制作菜单
    如何制作菜单在JavaFX中,我们通过MenuBar,Menu,MenuItem来制作菜单。MenuBar是菜单栏,通常位于窗口顶部。Menu是一个菜单项,放在菜单栏上。MenuItem是一个菜单条目,位于Menu中。效果展示示例代码importjavafx.application.Application;importjavafx.scene.Scene......
  • [GPT4]作为一个大龄程序员,如何提升自己未来的竞争力?
    作为一个大龄程序员,提升自己的竞争力至关重要。以下是一些建议,可以帮助你在职场上保持竞争力和不断壮大技能库:持续学习学习新技术:紧跟技术趋势,如人工智能、大数据、区块链等领域。获得相关证书:如AWS、Azure、GoogleCloud等云服务提供商的认证或者PMP等项目管理认证。观看......
  • 如何使用Next.js创建全栈应用程序
    Next.js乍一看似乎令人生畏,因为有这么多新概念需要掌握。但别担心——在这个循序渐进的教程中,我将为您提供使用Next.js创建您的第一个现代全栈应用程序所需的所有基本信息。在本教程中,我将带您了解Next.js的基础知识,并指导您创建您的第一个全栈应用程序。在本教程结束时,您将......
  • 杠杆和损失外汇交易者如何对待?Forexclub这样做
    在外汇交易中,杠杆和损失是外汇交易者不可逃避的问题,今天Forexclub就和大家聊聊如何对待这个问题很多外汇交易商会提供100倍的500倍的杠杆,甚至无限倍的。这并不意味着外汇交易者就应该使用最大的杠杆。如果外汇交易者像股票市场那样满仓交易,最大的可能就是很快失去所有的本金。继而......