JavaFX ComboBox样式(禁用伪类)

时间:2015-01-01 20:07:18

标签: java css javafx

我有fxml / css和java的这个(简单)组合。有问题的组合框(operationSelector)确实被禁用,但它的不透明度为0.4(禁用节点的默认值而不是1.0)。打印this.operationSelector.getStyleClass()表明singleton-combo-box类确实是其样式类的一部分。我尝试禁用所有样式类但是禁用了singleton-combo-box和STILL,不透明度为0.4。跳出来有什么明显的错误吗? (顺便说一下,我正在使用Java 8u40早期访问)

在FXML中:

<ComboBox fx:id="operationSelector" styleClass="singleton-combo-box" GridPane.columnIndex="1" GridPane.rowIndex="1" />

在CSS中:

.singleton-combo-box:disabled {
   -fx-opacity: 1.0;
}
.singleton-combo-box .list-cell:disabled {
  -fx-opacity: 1.0;
  -fx-text-fill: black;
}

在Java中:

    @FXML private ComboBox<String> operationSelector;

    @FXML
    private void initialize()
    {
            this.operationSelector.setDisable(true);
    }

结果如下:

http://imgur.com/6KBMHQi

1 个答案:

答案 0 :(得分:1)

根据eckig的建议,有一种方法可以使用私有API(com.sun。*)执行此操作:

StyleManager.getInstance().addUserAgentStylesheet(url)

经过一番研究后,我发现了Jonathan Giles的建议(UI控件技术负责人在Oracle的JavaFX团队中),他在没有直接使用私有API的情况下展示了这样做的方法:

 Application.setUserAgentStylesheet(url)

此方法应该是为整个应用程序(所有阶段和场景)设置通用样式表的最佳方法。