Constant resetting to initial-state when adding/remove styleclasses

Markus KARG markus at headcrashing.eu
Tue Dec 22 08:06:49 UTC 2015


+1

-----Original Message-----
From: openjfx-dev [mailto:openjfx-dev-bounces at openjdk.java.net] On Behalf Of Tom Schindl
Sent: Dienstag, 22. Dezember 2015 07:16
To: openjfx-dev at openjdk.java.net
Subject: Constant resetting to initial-state when adding/remove styleclasses

Hi,

While debugging some code I attached a listener to a property and
noticed that whenever a style-class is added to the control or even
worse somewhere in the parent hierarchy that FX resets the value to its
initial state (Node#reapplyCss & CssStyleHelper) only to set it back to
it's real value with the next CSS-Pass triggered by the next pulse.

I don't want to imagine if this happens with many value set via CSS and
eg adding/remove a styleclass to the scene root. Is this behavior really
by design like this?

You can try that yourself with the attached program below and using the
css at the end. I'm writing this because of Kevins request what the team
should invest time to because of Java9 delays and frankly all of those
bugs/features sound relevant and interesting but JavaFX performance
(most important CSS-Performance) is still miles away from eg browsers
who are the main competitors.

It doesn't help me to get an java.awt.Desktop replacement if my
input-forms do not render in a decent time frame - I would even say
rendering them in 2015 most be almost instant.

Tom

> package application;
> 
> import javafx.application.Application;
> import javafx.stage.Stage;
> import javafx.scene.Scene;
> import javafx.scene.control.Button;
> import javafx.scene.layout.BorderPane;
> import javafx.scene.layout.HBox;
> import javafx.scene.layout.StackPane;
> 
> 
> public class Main extends Application {
> 	@Override
> 	public void start(Stage primaryStage) {
> 		try {
> 			BorderPane root = new BorderPane();
> 
> 			StackPane p = new StackPane();
> 			p.getStyleClass().add("test-css");
> 			p.maxWidthProperty().addListener( (o, ol, ne) -> {
> 				System.err.println("Modified : " + ol + " " + ne);
> 				Thread.dumpStack();
> 			});
> 
> 			root.setCenter(p);
> 
> 			HBox box = new HBox();
> 
> 			{
> 				Button b = new Button("Modify Pane CSS");
> 				b.setOnAction( e -> p.getStyleClass().add("dummy"));
> 				box.getChildren().add(b);
> 			}
> 
> 			{
> 				Button b = new Button("Modify Root CSS");
> 				b.setOnAction( e -> {
> 					root.getStyleClass().add("dummy");
> 				});
> 				box.getChildren().add(b);
> 			}
> 
> 			root.setBottom(box);
> 
> 			Scene scene = new Scene(root,400,400);
> 			scene.getStylesheets().addAll(getClass().getResource("application.css").toExternalForm());
> 			primaryStage.setScene(scene);
> 			primaryStage.show();
> 		} catch(Exception e) {
> 			e.printStackTrace();
> 		}
> 	}
> 
> 	public static void main(String[] args) {
> 		launch(args);
> 	}
> }


> .test-css {
> 	-fx-max-width: 300;
> }



-- 
Thomas Schindl, CTO
BestSolution.at EDV Systemhaus GmbH
Eduard-Bodem-Gasse 5-7, A-6020 Innsbruck
http://www.bestsolution.at/
Reg. Nr. FN 222302s am Firmenbuchgericht Innsbruck



More information about the openjfx-dev mailing list