JavaFX ComboBox 样式(禁用伪类)
JavaFX ComboBox styling (disabled psuedo-class)
我有 fxml/css 和 java 的这个(简单)组合。有问题的组合框 (operationSelector) 确实被禁用,但它的不透明度是 0.4(禁用节点的默认值而不是 1.0)。打印 this.operationSelector.getStyleClass() 表明单例组合框 class 确实是其样式 class 的一部分。我尝试禁用所有样式 classes 但 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;
}
在Java中:
@FXML private ComboBox<String> operationSelector;
@FXML
private void initialize()
{
this.operationSelector.setDisable(true);
}
结果如下:
正如 eckig 所建议的,有一种方法可以使用私有 API (com.sun.*):
StyleManager.getInstance().addUserAgentStylesheet(url)
经过一番研究后,我发现了 Jonathan Giles(UI Oracle JavaFX 团队的控制技术负责人)的建议,他展示了一种无需直接使用私有 API:
Application.setUserAgentStylesheet(url)
这个方法应该是为整个应用程序(所有阶段和场景)设置通用样式的最佳方法-sheet。
我有 fxml/css 和 java 的这个(简单)组合。有问题的组合框 (operationSelector) 确实被禁用,但它的不透明度是 0.4(禁用节点的默认值而不是 1.0)。打印 this.operationSelector.getStyleClass() 表明单例组合框 class 确实是其样式 class 的一部分。我尝试禁用所有样式 classes 但 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;
}
在Java中:
@FXML private ComboBox<String> operationSelector;
@FXML
private void initialize()
{
this.operationSelector.setDisable(true);
}
结果如下:
正如 eckig 所建议的,有一种方法可以使用私有 API (com.sun.*):
StyleManager.getInstance().addUserAgentStylesheet(url)
经过一番研究后,我发现了 Jonathan Giles(UI Oracle JavaFX 团队的控制技术负责人)的建议,他展示了一种无需直接使用私有 API:
Application.setUserAgentStylesheet(url)
这个方法应该是为整个应用程序(所有阶段和场景)设置通用样式的最佳方法-sheet。