簡體   English   中英

JavaFx:如何使多維數據集調整為調整窗口大小

[英]JavaFx: How to make a cube adjust to window resize

我正在執行的javafx練習遇到問題。 從根本上說,問題在於制作一個矩形立方體,並使其在您調整窗口大小時自動擴展或收縮。 我已經完成了程序第一部分的工作,但是第二部分卻遇到了困難。 這是我的代碼:

public void start(Stage primaryStage) {
    Pane pane = new Pane();

    //Draw two rectangles
    Rectangle upper = new Rectangle(140, 100, 120, 100);
    upper.setFill(null);
    upper.setStroke(Color.BLACK);
    Rectangle lower = new Rectangle(100, 140, 120, 100);
    lower.setFill(null);
    lower.setStroke(Color.BLACK);

    //Draw the line connecting them
    Line ul = new Line(140, 100, 100, 140);
    Line ur = new Line(260, 100, 220, 140);
    Line ll = new Line(140, 200, 100, 240);
    Line lr = new Line(260, 200, 220, 240);

    pane.getChildren().addAll(upper, lower, ul, ur, ll, lr);

    Scene scene = new Scene(pane, 200, 200);

    primaryStage.setTitle("Exercise14");
    primaryStage.setScene(scene);
    primaryStage.show();
}

矩形立方體就這樣顯示,但是當我調整窗口大小時,我不知道如何使它擴展或收縮:

繪制立方體

多維數據集無法正確調整大小

我想我需要將每個單獨的形狀綁定到窗格或其他內容,但是我不確定從哪里開始。 希望方向正確。 謝謝。

您需要將更改偵聽器添加到場景,並計算相對於場景的寬度和高度的多維數據集的尺寸。 像這樣:

ChangeListener<Number> listenerX = new ChangeListener<Number>() {

    @Override
    public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {

        System.out.println( "X: observable: " + observable + ", oldValue: " + oldValue.doubleValue() + ", newValue: " + newValue.doubleValue());

        // TODO:
        // Lines:
        //   line.setStartX(...)
        //   line.setStartY(...)
        //   line.setEndX(...)
        //   line.setEndY(...)
        // 
        // Rectangles:
        //   rect.setTranslateX(...)
        //   rect.setTranslateY(...)
        //   rect.setWidth(...)
        //   rect.setHeight(...)
        // hint: instead of translate you can use rect.relocate(..., ...). translate is relative, relocate applies layoutX/Y and translateX/Y

    }
};

ChangeListener<Number> listenerY = new ChangeListener<Number>() {

    @Override
    public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {

        System.out.println( "Y: observable: " + observable + ", oldValue: " + oldValue.doubleValue() + ", newValue: " + newValue.doubleValue());

        // similare to listenerX

    }
};

scene.widthProperty().addListener( listenerX);
scene.heightProperty().addListener( listenerY);

我建議在這里說明的方法: http : //fxexperience.com/2014/05/resizable-grid-using-canvas/

基本上,您將創建自定義窗格,並覆蓋“ layoutChildren()”方法以繪制多維數據集。 您“只是”必須用您的多維數據集替換繪圖代碼。

這比使用偵聽器方法快得多:調整節點大小時,使用偵聽器(設置了寬度和高度時)將最少繪制兩次。 “ layoutChildren()”最多每幀繪制一幅。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM