2

これは、私のレイアウトがgridlinesでどのように見えるかです。これはメイン ウィンドウのサイズを変更したときの外観です。基本的に、一部のセルが指定された幅/高さを維持しながら、GridPane がステージ全体を水平方向および/または垂直方向に埋める方法についてのヒントが必要です。現時点で考えられるすべてのことを試しましたが、まだ解決策が見つかりません。AnchorPane を使用すると、必要な結果を達成するのに役立つ可能性がありますが、まだ方法を見つけようとしています。私は「ドラッグ アンド ドロップ」プログラミングの大ファンではないので、SceneBuilder は使いたくありません =)

@Override
public void start(final Stage primaryStage){
    BorderPane border = new BorderPane();
    GridPane grid = new GridPane();

    grid.getColumnConstraints().add(new ColumnConstraints(70));     //column 1
    grid.getColumnConstraints().add(new ColumnConstraints());       //column 2
    grid.getColumnConstraints().add(new ColumnConstraints(70));     //column 3
    grid.getColumnConstraints().add(new ColumnConstraints(100));    //column 4
    grid.getColumnConstraints().add(new ColumnConstraints());       //column 5
    grid.getColumnConstraints().add(new ColumnConstraints());       //column 6
    grid.getColumnConstraints().add(new ColumnConstraints());       //column 7
    grid.getColumnConstraints().add(new ColumnConstraints());       //column 8

    grid.setVgap(10);
    grid.setHgap(5);
    grid.setPadding(new Insets(20,20,20,20));
    grid.setGridLinesVisible(false);

    Button btnDownload = new Button("Download next");
    Label lblDownloadNext = new Label("next download in");
    Label lblTimer = new Label("03:21");
    VBox vboxTimer = new VBox();
    vboxTimer.setAlignment(Pos.CENTER);
    vboxTimer.getChildren().addAll(lblDownloadNext,lblTimer);
    Label lblTimer.setId("timer");
    Button btnStop = new Button("STOP");
    Button btnStop.setMaxWidth(Double.MAX_VALUE);

    grid.add(btnDownload, 0, 0, 2, 1);
    grid.add(vboxTimer, 2, 0, 5, 1);
    grid.add(btnStop, 7, 0);

    Label lblCSVPath = new Label("CSV path:");
    TextField txtCSVPath = new TextField("Select a CSV/TXT file");
    txtCSVPath.setId("csvpath");
    txtCSVPath.setEditable(false);
    Button btnCSVBrowse = new Button("Browse");
    Button btnCSVParse = new Button("Parse");
    btnCSVParse.setMaxWidth(Double.MAX_VALUE);
    grid.add(lblCSVPath, 0, 1);
    grid.add(txtCSVPath, 1, 1, 5, 1);
    grid.add(btnCSVBrowse, 6, 1);
    grid.add(btnCSVParse, 7, 1);

    Label lblOutput = new Label("Save to:");
    TextField txtOutputPath = new TextField("Select Output folder");
    txtOutputPath.setId("outputpath");
    txtOutputPath.setEditable(false);
    Button btnOutputBrowse = new Button("Browse");
    btnOutputBrowse.setMaxWidth(Double.MAX_VALUE);
    grid.add(lblOutput, 0, 2);
    grid.add(txtOutputPath, 1, 2, 6, 1);
    grid.add(btnOutputBrowse, 7, 2);

    TableView<CSVData> tblDoi = new TableView<CSVData>();
    tblDoi.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
    TableColumn columnDoi = new TableColumn("DOI URL");
    TableColumn columnUt = new TableColumn("UT");
    columnUt.setMinWidth(135);
    columnUt.setMaxWidth(175);
    tblDoi.getColumns().addAll(columnDoi, columnUt);
    grid.add(tblDoi, 0, 3, 8, 2);

    Label lblArticlesDownloaded = new Label("count");
    Label lblArticlesDownloadedCount = new Label("0");
    lblArticlesDownloadedCount.setId("downloadedCount");
    VBox vboxDownloaded = new VBox();
    vboxDownloaded.setAlignment(Pos.TOP_CENTER);
    vboxDownloaded.getChildren().addAll(lblArticlesDownloaded, lblArticlesDownloadedCount);
    Label lblArticlesLeft = new Label("left");
    Label lblArticlesLeftCount = new Label("0");
    lblArticlesLeftCount.setId("leftCount");
    VBox vboxLeft = new VBox();
    vboxLeft.setAlignment(Pos.TOP_CENTER);
    vboxLeft.getChildren().addAll(lblArticlesLeft, lblArticlesLeftCount);
    Label lblArticlesTotal = new Label("total");
    Label lblArticlesTotalCount = new Label("0");
    lblArticlesTotalCount.setId("totalCount");
    VBox vboxTotal = new VBox();
    vboxTotal.setAlignment(Pos.TOP_CENTER);
    vboxTotal.getChildren().addAll(lblArticlesTotal, lblArticlesTotalCount);

    Button btnStart = new Button("START");
    btnStart.setMaxWidth(Double.MAX_VALUE);
    Button btnExit = new Button("EXIT");
    btnExit.setMaxWidth(Double.MAX_VALUE);
    grid.add(vboxDownloaded, 0, 5, 1, 1);
    grid.add(vboxLeft, 1, 5);
    grid.add(vboxTotal, 2, 5);
    grid.add(btnStart, 3, 5, 3, 1);
    grid.add(btnExit, 6, 5, 2, 1);

    MenuBar menuBar = new MenuBar();
    Menu menuView = new Menu("View");
    CheckMenuItem menuViewWebViewItem = new CheckMenuItem("Show WebView");
    CheckMenuItem menuViewConsole = new CheckMenuItem("Show Console");
    menuView.getItems().addAll(menuViewWebViewItem, menuViewConsole);
    menuBar.getMenus().add(menuView);

    HBox menuBox = new HBox();
    menuBox.getChildren().add(menuBar);
    HBox.setHgrow(menuBar, Priority.ALWAYS);

    HBox gridBox = new HBox();
    gridBox.getChildren().add(grid);
    gridBox.setAlignment(Pos.CENTER);

    border.setTop(menuBox);
    border.setCenter(gridBox);

    Scene scene = new Scene(border, 500, 600);
    scene.getStylesheets().add(Main.class.getResource("application.css").toExternalForm());
    primaryStage.setTitle("Science Direct PDF Downloader");
    primaryStage.setScene(scene);
    primaryStage.setResizable(true);
    primaryStage.setMinWidth(500);
    primaryStage.setMinHeight(400);
    primaryStage.show();

不要なコードと思われるものは省略しました。ありがとう!

4

3 に答える 3

6

これが役立つと思います。Scene Builderの助けを借りて整理できます。まず、グリッド ペインの制約を設定する必要があります。下の写真では、それらを設定することで作成できます。あなたの側に応じて。

ここに画像の説明を入力

ここで、どちら側を増やしたいかを維持します。これも fxml によって行われます。

 <GridPane AnchorPane.bottomAnchor="-15.0" AnchorPane.leftAnchor="161.0" AnchorPane.rightAnchor="270.0" AnchorPane.topAnchor="30.0">

here AnchorPane.bottomAnchor="-15.0" これは主な場所であり、ウィンドウのサイズが変更されると拡大されます...

elements.you で何かを変更したい場合は、グリッド ペインの withProperty() を使用できます。このようなものです。

GridPane pne  =new GridPane();
    pne.widthProperty().addListener(new ChangeListener<Number>
    () {

        @Override
        public void changed(ObservableValue<? extends Number> ov, Number t, Number t1) {
            System.out.println("now do here what you want with inner objects");
        }
    }); 

これらのプロパティを使用して、グリッド ペインの内部要素やその他のプロパティを変更することもできます。

于 2013-11-12T12:03:57.517 に答える
1

トリックはあいまいな行と列の制約にあります。これでうまくいきました

for(int row = 0; row < 4; row++) {
        messageButtonGrid.getRowConstraints().add( 
                new RowConstraints(Region.USE_COMPUTED_SIZE, 
                        Region.USE_COMPUTED_SIZE, 
                        Region.USE_COMPUTED_SIZE, 
                        Priority.SOMETIMES, 
                        VPos.TOP, 
                        true));
    }
于 2016-12-16T08:40:13.123 に答える