用CSS美化你的JavaFX界面

1.原型参照


LayuiAmin Pro后台管理系统模板

2.系统性地设计你的CSS
主要设计了全局字体、按钮基础样式、按钮圆角、按钮悬停样式、各种配色主题样式、单选、复选框样式、标题字体、普通字体、输入框、导航菜单样式等。

/*全局字体样式*/
.root {
   -fx-font-size: 14px;
}

/*按钮基础样式*/
.btn-basic {
   /*文本对齐方式*/
   -fx-text-alignment: center;
   /*合适高度*/
   -fx-pref-height: 38px;
   /*内边距*/
   -fx-padding: 0 18px;
   /*无边框*/
   -fx-border-style: none;
   /*鼠标样式*/
   -fx-cursor: pointer;
}

/*鼠标覆盖按钮效果*/
.btn-basic:hover {
   /*粗体*/
   -fx-font-weight: bold;
   /*透明度*/
   -fx-opacity: 0.8;
}

/*边框正?;《劝磁?/
.btn-radius-normal {
   -fx-border-radius: 2px;
   -fx-background-radius: 2px;
}

/*边框圆角按钮*/
.btn-radius-large {
   -fx-border-radius: 50px;
   -fx-background-radius: 50px;
}

/*默认主题*/
.default-theme {
   -fx-background-color: #fff;
   -fx-border-color: rgb(230, 230, 230);
   -fx-text-fill: rgb(110, 110, 110);
}
/*深灰色主题*/
.dark-gray-theme {
   -fx-background-color: rgb(58, 61, 73);
}
/*深色主题*/
.dark-theme {
   -fx-background-color: rgb(40, 43, 51);
}

/*绿色主题*/
.green-theme {
   -fx-background-color: #009688;
   -fx-text-fill: #fff;
}

/*灰色主题*/
.gray-theme {
   -fx-background-color: rgb(210, 210, 210);
   -fx-text-fill: #fff;
}

/*警告色主题*/
.warning-theme {
   -fx-background-color: rgb(254, 87, 34);
   -fx-text-fill: #fff;
}

/*暖色主题*/
.warm-theme {
   -fx-background-color: rgb(254, 184, 0);
   -fx-text-fill: #fff;
}

/*蓝色主题*/
.blue-theme {
   -fx-background-color: rgb(30, 158, 255);
   -fx-text-fill: #fff;
}

/*内容盒子样式,设置一下圆角和内边距*/
.box {
   -fx-border-color: rgb(162, 162, 162);
   -fx-border-radius: 5px;
   -fx-background-radius: 5px;
   -fx-padding: 5 5 5 5;
}

/*输入框样式*/
.input-group {
   /*对齐方式*/
   -fx-text-alignment: left;
   /*内容显示方式*/
   -fx-content-display: inline-block;
   /*合适高度*/
   -fx-pref-height: 30px;
   /*边框色*/
   -fx-border-color: rgb(230, 230, 230);
   /*提示文字颜色*/
   -fx-prompt-text-fill: rgb(162, 162, 162);
   /*输入文字颜色*/
   -fx-text-fill: rgb(110, 110, 110);
   /*边框圆角*/
   -fx-border-radius: 2px;
   -fx-background-radius: 2px;
   /*内边距*/
   -fx-padding: 5 5 5 5;
   /*鼠标形状*/
   -fx-cursor: pointer;
}

/*白色字体*/
.font-white {
   -fx-text-fill: #fff;
}

/*灰色字体*/
.font-gray {
   -fx-text-fill: rgb(110, 110, 110);
}

/*标题字体*/
.font-title {
   -fx-font-size: 18px;
   -fx-font-weight: bold;
}

/*复选框样式*/
.check-box .box {
   -fx-background-color: #fff;
   -fx-border-color: rgb(230, 230, 230);
   -fx-border-radius: 3px;
}

/*复选框选中后标记的颜色*/
.check-box:selected .mark {
   -fx-background-color: #fff;
}

/*复选框选中后背景色*/
.check-box:selected .box {
   -fx-background-color: rgb(95, 184, 120);
}

/*单选按钮样式*/
.radio-button .radio {
   -fx-background-color: #fff;
   -fx-border-color: rgb(230, 230, 230);
   -fx-border-radius: 100;
}

/*单选按钮中间点的颜色*/
.radio-button:selected .dot {
   -fx-background-color: #fff;
}

/*单选按钮选中后背景色*/
.radio-button:selected .radio {
   -fx-background-color: rgb(95, 184, 120);
}

/*表格内容居中显示*/
.table-view .table-column {
   -fx-alignment: center;
}

/*左侧导航菜单按钮样式*/
.menu-btn {
   -fx-pref-width: 300px;
   -fx-pref-height: 35px;
   -fx-background-color: rgb(40, 43, 51);
   -fx-text-fill: rgb(191, 192, 194);
}

/*左侧导航菜单按钮鼠标悬停效果*/
.menu-btn:hover {
   -fx-background-color: rgb(95, 184, 120);
   -fx-text-fill: #fff;
}

/*风琴标题面板字体颜色*/
.titled-pane {
   -fx-text-fill: rgb(174, 175, 180);
}

/*风琴标题面板背景色*/
.titled-pane > .title {
   -fx-background-color: rgb(58, 61, 73);
   -fx-padding: 30 10 10 10;
}


3.样式的使用

  • fxml文件中使用
        <Button text="默认按钮" styleClass="btn-basic,green-theme,btn-radius-normal"/>

  • Java代码中使用
   Button myButton = new Button("圆角按钮");
   myButton.getStyleClass().add("border-button");

4.完整的使用了CSS的main.fxml布局文件

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.effect.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.image.Image?>
<BorderPane
       styleClass="green-theme"
       xmlns:fx="http://javafx.com/fxml"
       fx:controller="com.soft1841.book.controller.MainController">
   <top>
       <AnchorPane prefHeight="80.0">
           <Label text="图书后台管理系统" styleClass="font-gray" onMouseClicked="#listDefault"
                  AnchorPane.topAnchor="20" AnchorPane.leftAnchor="10">
               <effect>
                   <Reflection bottomOpacity="0.2" fraction="0.5" topOffset="-5.0"/>
               </effect>
               <font>
                   <Font name="System Bold" size="26.0"/>
               </font>
           </Label>
           <ImageView fitWidth="45" fitHeight="45" AnchorPane.topAnchor="15" AnchorPane.rightAnchor="120">
               <Image url="/img/me.png"/>
           </ImageView>
           <Button text="退出系统" styleClass="btn-radius-large,blue-theme"
                   AnchorPane.topAnchor="20" AnchorPane.rightAnchor="20"/>
       </AnchorPane>
   </top>
   <center>
       <SplitPane>
           <AnchorPane styleClass="dark-gray-theme" minWidth="200">
               <Accordion AnchorPane.leftAnchor="0.0"
                          AnchorPane.rightAnchor="0.0"
                          AnchorPane.topAnchor="0.0">
                   <panes>
                       <TitledPane alignment="TOP_LEFT" text="类别管理">
                           <VBox minHeight="100" spacing="10" styleClass="dark-theme">
                               <Button styleClass="menu-btn" text="图书类别" onAction="#listType"/>
                               <Button styleClass="menu-btn" text="分类统计"/>
                           </VBox>
                       </TitledPane>
                       <TitledPane alignment="TOP_LEFT" text="图书管理">
                           <VBox minHeight="100" spacing="10" styleClass="dark-theme">
                               <Button styleClass="menu-btn" text="图书信息" onAction="#listBook"/>
                               <Button styleClass="menu-btn" text="统计分析"/>
                           </VBox>
                       </TitledPane>
                       <TitledPane alignment="TOP_LEFT" text="用户管理">
                           <VBox minHeight="130" spacing="10" styleClass="dark-theme">
                               <Button styleClass="menu-btn" text="管理员信息"/>
                               <Button styleClass="menu-btn" text="读者信息"/>
                               <Button styleClass="menu-btn" text="统计分析"/>
                           </VBox>
                       </TitledPane>
                       <TitledPane alignment="TOP_LEFT" text="借阅管理">
                           <VBox minHeight="130" spacing="10" styleClass="dark-theme">
                               <Button styleClass="menu-btn" text="借阅查询"/>
                               <Button styleClass="menu-btn" text="统计分析"/>
                           </VBox>
                       </TitledPane>
                       <TitledPane alignment="TOP_LEFT" text="系统维护">
                           <VBox minHeight="130" spacing="10" styleClass="dark-theme">
                               <Button styleClass="menu-btn" text="系统初始化"/>
                               <Button styleClass="menu-btn" text="数据备份"/>
                               <Button styleClass="menu-btn" text="主题设置"/>
                           </VBox>
                       </TitledPane>
                   </panes>
               </Accordion>
           </AnchorPane>

           <!--中间内容面板-->
           <StackPane fx:id="mainContainer" styleClass="default-theme" minWidth="1060">
               <padding>
                   <Insets top="10" left="30" bottom="5" right="10"/>
               </padding>
           </StackPane>
           <padding>
               <Insets top="10"/>
           </padding>
       </SplitPane>
   </center>
</BorderPane>

5.效果


fxml+css实现效果
最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,172评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,346评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,788评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,299评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,409评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,467评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,476评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,262评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,699评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,994评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,167评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,499评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,149评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,387评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,028评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,055评论 2 352

推荐阅读更多精彩内容

  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,709评论 2 59
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生_X自主阅读 15,975评论 3 119
  • 故乡的山, 故乡的水, 故乡的风儿轻轻吹。 背井离乡在外谋生 创业打拼的故乡人, 你们何时才能把家回? 快回来看看...
    街西农夫阅读 410评论 0 1
  • 最近对一些小事压抑火气 是斤斤计较的倒退 还是事事认真的成长 不知道 逃不掉
    学长23333阅读 150评论 0 0
  • 现在是半夜三点,刚刚喂完奶,宝宝满足的继续睡了,和之前的五个月一样,每晚她都得饿两三四次,直到她熟睡我才能安心的...
    豆豆的麻麻阅读 354评论 0 0