我有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)
此方法应该是为整个应用程序(所有阶段和场景)设置通用样式表的最佳方式。