I'm currently working on a javafx project and I keep running into the problem with blurry nodes when they are added to a Stackpane.
I have tried using setSnapToPixel(true) on the Stackpane but I still end up with a blurry result.
Stackpane pane = new Stackpane(new NodeConsole(15)); //I get a blurry result
primaryStage.setScene(new Scene(pane));
primaryStage.show();
When I use a Group I get this:
Clear Image
When I use a Stackpane I get this:
Blurry Image
Related
I'm trying to make a centered grid pane in the JavaFX scene builder which stays a fixed size. I'm having a hard time doing this myself. Anything I can do?
I'm trying to accomplish something like this:
You can use stackpane as parent of your gridpane
I developed a 3d plotting tool (so-called A; which is a subscene). I want to put this subscene in a Split Pane (B). The problem is a part of my scene disappears (when I rotate the plot some parts appear). as you can see below:
trauncated plot
However; when I use HBox or Pane instead of SplitPane, everything works well.
the code is here(I simplified it for better understanding)
SplitPane splitPane = FXMLLoader.load(getClass().getResource("sample.fxml"));
Scene scene =new Scene(splitPane);
Pane pane = new HBox();
pane.getChildren().add(A);
splitPane.getItems().add(pane);
primaryStage.setScene(scene);
I solve it. It is a little bit tricky but in the subcode of sub-scene A; I use Stackpane as a root. I changed it to Group. everything works well.
I have this problem:
I am using javaFX and scene builder (2.0) and I have placed scrollPane into my window, which in turn contains anchorPane. When I start my application everything works ok, but when I programmatically/dynamically add nodes into the anchorPane, for some reason whole layout of my app gets weird/buggy. Basically everything stays in the prefWidth and prefHeight and does not resize when resizing the app's window, while before adding for example Polyline into the anchorPane there wasn't any problem.
It affects practically all nodes (menubar, vertical toolbar) which aren't even in the anchorPane...
here is piece of my code:
//initialize function of my cotroller class
anchorPane = new AnchorPane();
anchorPane.getChildren().add(canvas);
scrollPane.setContent(anchorPane);
...
//dynamic node insert
Polyline polyline = new Polyline(...);
...
anchorPane.getChildren.add(polyline);
//and now the whole app's layout is bugged
Thanks for answers.
I managed to fix it by changing AnchorPane to Pane.
I'm having a hard time figuring out how to make a transparent background for an application window in javafx. scene.setFill(null) seems to only work with stage.initStyle(StageStyle.TRANSPARENT). Doc for setFill says
Both a null value meaning paint no background and a Paint with transparency are supported, but what is painted behind it will depend on the platform.
but that doesn't make sense to me. It works (on windows 8) only with StageStyle.TRANSPARENT which removes the exit button and such which I still want.
I've looked at http://www.adam-bien.com/roller/abien/entry/completely_transparent_windows_stage_in and a few questions here.
Can this be done on windows?
I've been tinkering with similar settings, and this works for me:
#Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.initStyle(StageStyle.TRANSPARENT);
primaryStage.setOpacity(0.5);
primaryStage.setFullScreen(true);
Scene scene = new Scene(root, 300, 275);
primaryStage.setScene(scene);
scene.getStylesheets().add(Main.class.getResource("main.css")
.toExternalForm());
primaryStage.show();
}
...and the css
.root {
-fx-background-color: rgba(0,0,0,0.5);
}
You can use this library. It is a fully customizable JavaFx Stage (CustomStage). You can see in-detail description of how to use it in this CustomStage Wiki
It has,
Window resizing
Default action buttons and their behaviour (close, maximize/restore, minimize)
Window dragging
Window is automatically scaled as for screen resolution
Very responsive
Stylable
Can achieve transparency
Has in-built navigation panes and drawers
etc.
I am trying to create a splash screen like the example I've provded.
It seems that AnchorPane does not allow transparent background, I've tried setting the css of the AnchorPane to -fx-background-color: rgba(255,0,255,0.1) ; but the white background still shows up.
All I have in my fxml file is a AnchorPane with ImageView with contain the png image
I've looked everywhere but can't find any solution, any help would be appreciated. Thanks
Try this JavaFX splash sample created for the Stackoverflow question: Designing a splash screen (java). And a follow up sample which also provides application initialization progress feedback.
JavaFX does offer the Preloader interface for smooth transfer from splash to application, but the above samples don't make use of it.
The splash samples above also don't do the transparent effect, but this dialog sample shows you how to do that and you can combine it with the previous splash samples to get the effect you want.
The transparent effect is created by:
stage.initStyle(StageStyle.TRANSPARENT).
scene.setFill(Color.TRANSPARENT).
Ensuring your root node is not an opaque square rectangle.
Which is all demonstrated in Sergey's sample.
Related question:
How to use javaFX Preloader with stand-alone application in Eclipse?
Update Apr 2016 based on additional questions
the preloader image isnt in the foreground. I have tried stage.toFront(), but doesnt help.
A new API was created in Java 8u20 stage.setAlwaysOnTop(true). I updated the linked sample to use this on the initial splash screen, which helps aid in a smoother transition to the main screen.
For Java8+
For modena.css (the default JavaFX look and feel definition in Java 8), a slight shaded background was introduced for all controls (and also to panes if a control is loaded).
You can remove this by specifying that the default background is transparent. This can be done by adding the following line to your application's CSS file:
.root { -fx-background-color: transparent; }
If you wish, you can use CSS style classes and rules or a setStyle call (as demonstrated in Sergey's answer) to ensure that the setting only applies to the root of your splash screen rather than all of your app screens.
See related:
how to make transparent scene and stage in javafx?
You need to have transparent Stage and Scene for that. Pane itself doesn't have a color.
public void start(Stage primaryStage) {
Button btn = new Button("Say 'Hello World'");
AnchorPane root = new AnchorPane();
root.getChildren().add(btn);
// Java 8: requires setting the layout pane background style to transparent
// https://bugs.openjdk.java.net/browse/JDK-8092764
// "Modena uses a non-transparent background by default"
root.setStyle("-fx-background-color: transparent;");
Scene scene = new Scene(root, 300, 250, Color.TRANSPARENT);
primaryStage.initStyle(StageStyle.TRANSPARENT);
primaryStage.setScene(scene);
primaryStage.show();
}