Пограничная панель javafx только с 2 узлами

В настоящее время я работаю над Программой, которая требует холста и метки на стороне. Я пытался использовать Borderpane для достижения этой цели, но не получилось. Одна из моих проблем заключается в том, что BorderPane для инициализации требуется либо нет, либо один, либо пять объектов. Мне нужно только два. Моя другая проблема заключается в том, что только холст (в центре) отображается, даже если я инициализирую BorderPane с 5 объектами. Это мой код:

    primaryStage.setTitle("Drawing Operations Test");
    primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
        @Override
        public void handle(WindowEvent event) {
            try {
                scheduler.shutdown();
                stop();
            } catch (Exception ex) {
                System.err.println("stop failed: " + ex);
                ex.printStackTrace();
            }
        }
    });

   // Group root = new Group();
    Canvas canvas = new Canvas(size, size);
    gc = canvas.getGraphicsContext2D();
    label.setTextFill(Color.web("#000000"));
    label.setFont(new Font("Arial", 30));
    label.setContentDisplay(ContentDisplay.RIGHT);


    //BorderPane.setCenter(canvas);
    //BorderPane.setRight(label);
    //BorderPane.setAlignment(canvas, Pos.CENTER);
    //BorderPane.setAlignment(label, Pos.BASELINE_RIGHT);



    BoxBlur blur = new BoxBlur();
    blur.setWidth(1);
    blur.setHeight(1);
    blur.setIterations(1);
    gc.setEffect(blur);

    drawShapes(gc, size);


            BorderPane.setAlignment(canvas,Pos.TOP_CENTER);
    // Set the alignment of the Bottom Text to Center

    // Set the alignment of the Right Text to Center
    BorderPane.setAlignment(label,Pos.CENTER_RIGHT);

            BorderPane root = new BorderPane(canvas,label);

    // Set the Size of the VBox
    root.setPrefSize(400, 400);     
    // Set the Style-properties of the BorderPane
    root.setStyle("-fx-padding: 10;" +
            "-fx-border-style: solid inside;" +
            "-fx-border-width: 2;" +
            "-fx-border-insets: 5;" +
            "-fx-border-radius: 5;" +
            "-fx-border-color: blue;");

    // Create the Scene
    Scene scene = new Scene(root);
    // Add the scene to the Stage
    primaryStage.setScene(scene);
    // Set the title of the Stage
    primaryStage.setTitle("A simple BorderPane Example");
    // Display the Stage
    primaryStage.show();

Как я могу решить эту проблему?

2 ответа

Решение

Вы можете достичь того, что вы просите, просто с

BorderPane root = new BorderPane();
root.setCenter(canvas);
root.setRight(label);

или же

BorderPane root = new BorderPane(canvas);
root.setRight(label);

или же

BorderPane root = new BorderPane(canvas, null, label, null, null);

В документации есть пример создания пограничной панели с тремя узлами, и в ней прямо говорится: "Любая из позиций может быть нулевой".

Следующие работы для меня.

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class FxTest00 extends Application {

    public void start(Stage mainStage) throws Exception {
        mainStage.setTitle("JavaFX Skeleton");
        BorderPane root = new BorderPane();
        Canvas canvas = new Canvas(300, 200);
        Label label = new Label("FX Label");
        root.setCenter(canvas);
        root.setRight(label);
        Scene theScene = new Scene(root);
        mainStage.setScene(theScene);
        mainStage.show();
    }

    public static void main(String[] args) {
        Application.launch(args);
    }
}
Другие вопросы по тегам