代码之家  ›  专栏  ›  技术社区  ›  Sander B

使用JavaFx创建暗模式

  •  7
  • Sander B  · 技术社区  · 7 年前

    我想知道是否有一种使用JavaFx和CSS创建暗模式的简单方法。我有一个菜单栏,带有一个名为“暗模式”的复选菜单项,当我单击它时,我希望场景变暗,文本变白。

    4 回复  |  直到 7 年前
        1
  •  15
  •   Wesos de Queso    5 年前

    这是我的。

    (更新)前一个太不透明了。

    .root { 
        -fx-accent: #1e74c6;
        -fx-focus-color: -fx-accent;
        -fx-base: #373e43;
        -fx-control-inner-background: derive(-fx-base, 35%);
        -fx-control-inner-background-alt: -fx-control-inner-background ;
    }
    
    .label{
        -fx-text-fill: lightgray;
    }
    
    .text-field {
        -fx-prompt-text-fill: gray;
    }
    
    .titulo{
        -fx-font-weight: bold;
        -fx-font-size: 18px;
    }
    
    .button{
        -fx-focus-traversable: false;
    }
    
    .button:hover{
        -fx-text-fill: white;
    }
    
    .separator *.line { 
        -fx-background-color: #3C3C3C;
        -fx-border-style: solid;
        -fx-border-width: 1px;
    }
    
    .scroll-bar{
        -fx-background-color: derive(-fx-base,45%)
    }
    
    .button:default {
        -fx-base: -fx-accent ;
    } 
    
    .table-view{
        /*-fx-background-color: derive(-fx-base, 10%);*/
        -fx-selection-bar-non-focused: derive(-fx-base, 50%);
    }
    
    .table-view .column-header .label{
        -fx-alignment: CENTER_LEFT;
        -fx-font-weight: none;
    }
    
    .list-cell:even,
    .list-cell:odd,
    .table-row-cell:even,
    .table-row-cell:odd{    
        -fx-control-inner-background: derive(-fx-base, 15%);
    }
    
    .list-cell:empty,
    .table-row-cell:empty {
        -fx-background-color: transparent;
    }
    
    .list-cell,
    .table-row-cell{
        -fx-border-color: transparent;
        -fx-table-cell-border-color:transparent;
    }
    

    enter image description here

        2
  •  11
  •   James_D    7 年前

    我已经有一段时间没有使用“主题化”JavaFX应用程序了,但不久前我有了一个CSS文件:

    .root {
        -fx-base: #3f474f;
        -fx-accent: #e7eff7 ;
        -fx-default-button: #7f878f ;
        -fx-focus-color: #efefef;
        -fx-faint-focus-color: #efefef22;
        -fx-focused-text-base-color : ladder(
                -fx-selection-bar,
                -fx-light-text-color 45%,
                -fx-dark-text-color 46%,
                -fx-dark-text-color 59%,
                -fx-mid-text-color 60%
            );
        -fx-focused-mark-color : -fx-focused-text-base-color ;   
    
    }
    
    .text-input:focused {
        -fx-highlight-text-fill: ladder(
            -fx-highlight-fill,
            -fx-light-text-color 45%,
            -fx-dark-text-color  46%,
            -fx-dark-text-color  59%,
            -fx-mid-text-color   60%
        );
    }
    

    如果你把这个放进文件 dark-theme.css ,您可以

    checkMenuItem.selectedProperty().addListener((obs, wasSelected, isSelected) -> {
        if (isSelected) {
            scene.getStyleSheets().add("dark-theme.css");
        } else {
            scene.getStyleSheets().remove("dark-theme.css");
        }
    });
    
        3
  •  1
  •   SDIDSA    5 年前

    属性库可以应用于每种JavaFX类型,这使得可以使用JavaFX节点或布局的单一基色指定颜色主题。。。,并根据基础颜色计算出不同的颜色(用于其子对象)!

    在这种情况下,您正在尝试为整个场景设置主题,因此您应该将基色应用于层次中的最高组件,您可以通过获取场景的根节点来获得该组件!

    checkMenuItem.selectedProperty().addListener((obs, wasSelected, isSelected) -> {
        if (isSelected) {
            scene.getRoot().setStyle("-fx-base:black");
        } else {
            scene.getRoot().setStyle("");
        }
    });
    
        4
  •  -1
  •   Fire Code    4 年前

    我对javafx和所有东西都是新手,但我很确定 2个样式表 在它们之间切换就足够了。

    如果我说的是错的,对不起,我是javafx新手