我似乎发现了一个JavaFX(8u144,运行在Windows 7上)的案例,其中TextField使用错误的样式类呈现。当节点不是父级时,JavaFX CSS类不会被删除
这仅出现在以下情况
- 风格类中删除,而节点未连接到现场,并
- 父
GridPane
有一个风格类分配的情况发生,即使类没有内容。
我已经分离的问题从一个更大的应用程序分为以下几个人为的例子:
public class RenderBug extends Application {
private static final String ERROR = "error";
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
TextField field = new TextField();
GridPane grid = new GridPane();
grid.getStyleClass().add("some-random-class");
grid.add(field, 0, 0);
StackPane stack = new StackPane(grid);
Scene scene = new Scene(stack);
scene.getStylesheets().add("/foo.css");
primaryStage.setWidth(300);
primaryStage.setHeight(300);
primaryStage.setScene(scene);
primaryStage.show();
Timeline line = new Timeline();
line.getKeyFrames().add(new KeyFrame(Duration.seconds(4), event -> {
field.getStyleClass().add(ERROR);
}));
line.getKeyFrames().add(new KeyFrame(Duration.seconds(5), event -> {
stack.getChildren().remove(grid);
}));
line.getKeyFrames().add(new KeyFrame(Duration.seconds(6), event -> {
field.getStyleClass().remove(ERROR);
}));
line.getKeyFrames().add(new KeyFrame(Duration.seconds(7), event -> {
stack.getChildren().add(grid);
System.out.println(field.getStyleClass());
}));
line.play();
}
}
foo.css
.text-field.error {
-fx-background-color: red;
}
.some-random-class {
/** no content required */
}
截图。此时TextField是红色的,即使类“错误”已被删除。即使与现场交互,调整窗口大小等也不能解决问题。
这是一个真正的错误吗?还是我做错了什么?我找不到任何文档暗示风格类不能或不应该更新“离线”
讨论可以[点击这里]研究发现(http://mail.openjdk.java。 net/pipermail/openjfx-dev/2017-August/020684.html)。 – user1803551