JavaFX禁用元素样式化

10

我有一个带有一些数据的组合框。

public class Test extends Application {
    public static final String[] items = "One Two Three".split(" ");
    @Override
    public void start(Stage primaryStage) throws Exception {
        final ComboBox<String> box = new ComboBox<>(FXCollections.observableArrayList(items));
        box.getSelectionModel().selectFirst();

        primaryStage.setScene(new Scene(box));
        primaryStage.show();
    }
}

启用的下拉框

如果我将下拉框设置为禁用,它会变灰,但我需要将文本设置为黑色。谷歌说我需要将不透明度设置为1.0。

box.setDisable(true);
box.setStyle("-fx-opacity: 1.0;");

什么也没有发生。它还是灰色的。

enter image description here

即使我将 text-fill 属性设置为 black,它还是灰色的。

box.setDisable(true);
box.setStyle("-fx-opacity: 1.0; -fx-text-fill: black;");

在此输入图片描述

发生了什么?我该如何更改禁用组合框的文本颜色?

1个回答

22

disabled属性会从场景图节点级联到其子节点,因此组合框的所有子节点都有效地继承了它们的:disabledCSS样式。例如,显示所选项目的 Label 使用其 disabled 样式,其中不透明度设置为0.4。

要实现您想要的效果,请执行

.combo-box:disabled, .combo-box:disabled > * {
  -fx-opacity: 1.0 ;
}

在外部CSS文件中。


James,我该如何使用表视图的列标题行来实现这个功能?当我在表格上使用.table-view:disabled, .table-view:disabled > * { -fx-opacity: 1; }时,标题不会变暗,但它也不会使包含文本字段的列变暗...但它会使包含标签的列变暗...所以我很困惑。 - Michael Sims

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接