2017-08-01 59 views
1

我似乎发现了一个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是红色的,即使类“错误”已被删除。即使与现场交互,调整窗口大小等也不能解决问题。

TextField shown with red

这是一个真正的错误吗?还是我做错了什么?我找不到任何文档暗示风格类不能或不应该更新“离线”

回答

1

我确认这是JavaFX developer mailing list上的问题,并提出了一个错误报告。显然这是8u102中引入的一种回归。

JDK-8185709,这显然是的JDK-8183100

+0

讨论可以[点击这里]研究发现(http://mail.openjdk.java。 net/pipermail/openjfx-dev/2017-August/020684.html)。 – user1803551