CSS style class rendering bug

Kevin Rushforth kevin.rushforth at oracle.com
Tue Aug 1 15:11:04 UTC 2017


Agreed. Can you file a bug here?

http://bugreport.java.com/

-- Kevin


David Grieve wrote:
> Smells like a bug to me.
>
>
> On 8/1/17 10:08 AM, adam at adamish.com wrote:
>> (https://stackoverflow.com/questions/45440102/javafx-css-class-not-removed-when-node-disconnected) 
>>
>>
>> I appeared to have discovered a case in JavaFX (8u144, running on
>> Windows 7) where a TextField is rendered using the wrong style class.
>>
>> This only appears to happen in the following situation
>>
>>   * style class removed whilst Node not attached to Scene AND
>>   * parent `GridPane` has a style-class assigned, even if that class
>> doesn't have content.
>>
>> I've separated the issue from a larger application into the following
>> contrived example:
>>
>>      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 */
>>      }
>>
>> Screenshot. At this point TextField is red, even though the class
>> "error" has been removed. Even interacting with the field, resizing
>> window etc. does not fix the issue.
>>
>> [![TextField shown with red][1]][1]
>>
>> Is this a genuine bug? or am I doing something wrong? I can't find any
>> documentation to hint that style-classes cannot or shouldn't be
>> updated "offline"
>>
>>    [1]: https://i.stack.imgur.com/ZPEYi.png
>>
>>
>


More information about the openjfx-dev mailing list