JavaFX ComboBox 样式(禁用伪类)



我有fxml/css和java的(简单)组合。有问题的组合框(操作选择器)确实被禁用,但它的不透明度为 0.4(禁用节点的默认值而不是 1.0)。打印 this.operationSelector.getStyleClass() 表明 singleton-combo-box 类确实是其样式类的一部分。我尝试禁用所有样式类,但单例组合框除外,禁用时不透明度仍然为 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;
}

在爪哇中:

    @FXML private ComboBox<String> operationSelector;
    @FXML
    private void initialize()
    {
            this.operationSelector.setDisable(true);
    }

结果如下:

https://i.stack.imgur.com/3Lyb1.jpg

正如eckig所建议的那样,有一种方法可以使用私有API(com.sun.*)来做到这一点:

StyleManager.getInstance().addUserAgentStylesheet(url)

经过一些研究,我发现了Jonathan Giles(OracleJavaFX团队UI控制技术负责人)的建议,他展示了一种无需直接使用私有API即可做到这一点的方法:

 Application.setUserAgentStylesheet(url)

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

最新更新