I'm still learning and experimenting with GUIs in JavaFX and I cant seem to get the "look" that I'm aiming for.. I'm trying to group a couple of Labels in a Panel and then in a different panel add another Label. But I cant seem to figure out how to properly use "JPanels" in JavaFX?
Any help would be greatly appreciated :D Thanks
EDIT: Here is what I'm trying to achieve by trying different layouts, no luck still
There are 6 Panels in javaFX such as: BorderPane, StackPane, GridPane, FlowPane,TilePane and AnchorPane. StackPane. Stack pane allows you to place many nodes one on top of an other. StackPane root = new StackPane(); Button btn1 = new Button(" 1 "); Button btn2 = new Button("22222222"); root. getChildren().
The equivalent of a Swing JFrame in JavaFX is the Stage class which extends from Window and can be made visible by calling show() method. The Scene is more like the frame's content pane (not exactly the same but similar in concept).
JavaFX makes it easier to form desktop applications and games in Java. JavaFX has replaced Swing because of the suggested GUI toolkit for Java. What is more, JavaFX is additional consistent in its style than Swing and has additional options.
While Java FX Pane
is similar to Swing JPanel
, the example below uses subclasses of Pane
to get various layout effects. In particular,
Instead of a JPanel
set to GridLayout
, use GridPane
.
Instead of a JPanel
set to BoderLayout
, use BorderPane
.
Use ContentDisplay.TOP
to position a label's content above its text, as shown here.
Use ContentDisplay.CENTER
for topCenter
to make the label overlay the rectangle; for comparison, a previous version used StackPane
.
Use setPadding()
, setMargin()
and setVgap()
to spread things out a little.
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.ContentDisplay;
import javafx.scene.control.Label;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.Border;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.BorderStroke;
import javafx.scene.layout.BorderStrokeStyle;
import javafx.scene.layout.BorderWidths;
import javafx.scene.layout.CornerRadii;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.stage.Stage;
/**
* @see https://stackoverflow.com/a/37935114/230513
*/
public class BorderTest extends Application {
private static final Border black = new Border(new BorderStroke(Color.BLACK,
BorderStrokeStyle.SOLID, new CornerRadii(8), new BorderWidths(2)));
private static final Border red = new Border(new BorderStroke(Color.RED,
BorderStrokeStyle.SOLID, new CornerRadii(8), new BorderWidths(2)));
private static final Border blue = new Border(new BorderStroke(Color.BLUE,
BorderStrokeStyle.SOLID, new CornerRadii(8), new BorderWidths(2)));
private static final Color yellow = Color.YELLOW.deriveColor(0, .9, 1, 1);
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Test");
GridPane root = new GridPane();
root.setPadding(new Insets(16));
root.setVgap(16);
root.setBorder(black);
root.setBackground(new Background(new BackgroundFill(
Color.LIGHTGRAY, CornerRadii.EMPTY, Insets.EMPTY)));
BorderPane top = new BorderPane();
top.setPadding(new Insets(16));
top.setBorder(red);
top.setLeft(createLabel("Label 1", yellow, 16));
Label topCenter = createLabel("Label 2", yellow, 64);
topCenter.setContentDisplay(ContentDisplay.CENTER);
BorderPane.setMargin(topCenter, new Insets(16));
top.setCenter(topCenter);
top.setRight(createLabel("Label 3", yellow, 16));
root.add(top, 0, 0);
BorderPane bot = new BorderPane();
bot.setPadding(new Insets(16));
bot.setBorder(blue);
bot.setCenter(createLabel("Label 4", Color.GREEN, 24));
root.add(bot, 0, 1);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
private Label createLabel(String text, Color color, int size) {
Rectangle r = new Rectangle(3 * size, 2 * size);
r.setFill(Color.TRANSPARENT);
r.setStroke(color);
r.setStrokeWidth(3);
Label l = new Label(text, r);
l.setContentDisplay(ContentDisplay.TOP);
l.setTextFill(color);
l.setFont(new Font(16));
return l;
}
public static void main(String[] args) {
launch(args);
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With