2

次のプログラムは、ペイン (またはアンカーペインのボーダーペイン) に埋め込まれている場合、折れ線グラフの水平方向のサイズ変更に失敗します。代わりに、折れ線グラフが VBox の直接の親である場合、すべてが期待どおりに機能します。

グラフのサイズを親ペインにバインドする必要があることがわかりました。これは、VBox と HBox によって自動的に行われる必要があると思います。

HBox/VBox で囲み、成長と配置のポリシーを設定するさまざまな組み合わせを試した後、レイアウトがどのように機能するかについてかなり混乱しています。サイズ変更に関して、UI コンポーネントの動作に違いがあることがわかりました。

明確化 (または javadoc の不明なドキュメントに関するダイジェストの洞察) を歓迎します。

よろしくお願いします。

ソースを編集して明確化

import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.chart.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;

public class App extends Application {

    @Override
    public void start(Stage stage) {
        NumberAxis xAxis = new NumberAxis();
        NumberAxis yAxis = new NumberAxis();
        xAxis.setLabel("X");
        yAxis.setLabel("Y");

        final LineChart<Number, Number> lineChart = new LineChart<>(xAxis, yAxis);
        lineChart.setTitle("x = f(y)");

        XYChart.Series data = new XYChart.Series();
        data.setName("Serie 1");
        for (int i = 0; i < 10; i++) {
            data.getData().add(new XYChart.Data(i, i * i));
        }
        lineChart.getData().add(data);

        VBox vb = new VBox();
        vb.setFillWidth(true);
        HBox hb = new HBox();
        hb.getChildren().add(lineChart);
        hb.setFillHeight(true);
        vb.getChildren().add(hb);

        HBox.setHgrow(lineChart, Priority.ALWAYS);
        VBox.setVgrow(hb, Priority.ALWAYS);

        Scene scene = new Scene(vb);

        stage.setScene(scene);
        stage.centerOnScreen();
        stage.setResizable(true);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
4

1 に答える 1