2017-08-01 5 views
1

Je semblais avoir découvert un cas dans JavaFX (8u144, s'exécutant sur Windows 7) où un TextField est rendu en utilisant la mauvaise classe de style.JavaFX Classe CSS non supprimée lorsque le nœud n'est pas parent

Cela ne semble se produire dans la situation suivante

  • classe de style enlevé tout nœud non attaché à la scène et
  • parent GridPane a un style de classe attribué, même si cette classe n'a pas de contenu .

J'ai séparé la question d'une plus grande application dans l'exemple suivant artificiel:

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 */ 
} 

capture d'écran. À ce stade, TextField est rouge, même si la classe "erreur" a été supprimée. Même interagir avec le champ, redimensionner la fenêtre, etc. ne résout pas le problème.

TextField shown with red

Est-ce un bug authentique? ou est-ce que je fais quelque chose de mal? Je ne trouve aucune documentation indiquant que les classes de style ne peuvent pas ou ne doivent pas être mises à jour "hors ligne"

Répondre

1

J'ai confirmé qu'il s'agit d'un problème sur le JavaFX developer mailing list et que j'ai signalé un problème. Apparemment, il s'agit d'une régression introduite en 8u102.

Voir JDK-8185709, qui est apparemment un double de JDK-8183100

+0

Discussion se trouve [ici] (http://mail.openjdk.java. net/pipermail/openjfx-dev/2017-Août/020684.html) pour ceux qui sont intéressés. – user1803551