1

我正在使用 javafx 构建 GUI,包括带有 MenuBar 的 GridPane 和另一个 GridPane。我希望第二个 GridPane 是可滚动的,所以我将它放入 ScrollPane“new ScrollPane(grid2)”,并将其添加到第一个 GridPane。不幸的是,ScrollPane 的内容不再水平拉伸,如果窗口大小发生变化,需要什么。

这是一张图片,应该可以解决问题:http: //img5.fotos-hochladen.net/uploads/scrollpaneemptwjpv2084xm.png (不能使用软工具,因为信誉<10)

我想要大量的 TitledPages,在它们前面有一个按钮,并且可以滚动(不像菜单,它应该留在顶部)。

如果我只是将第二个 GridPane 添加到第一个,它会以正确的方式拉伸,所以我想知道为什么 ScrollPane 或其元素也不能拉伸,以及如何拉伸。

我将我的代码发布给您,感谢您阅读本文,并感谢您的努力!

package main;

import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.embed.swing.JFXPanel;
import javafx.geometry.Bounds;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text; 
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class MainGUI6 extends JFrame {

    private static final long serialVersionUID = -8824577253071530315L;
    JFXPanel panel;
    Scene scene;
    boolean wait = true;

    public MainGUI6() {
        panel = new JFXPanel();
        Platform.runLater(new Runnable() {
            @Override
            public void run() {

                GridPane grid = new GridPane();
                scene = new Scene(grid, 1000, 1000);
                grid.setVgap(4);
                grid.setPadding(new Insets(5, 5, 5, 5));

                //Menu
                final Menu menu1 = new Menu("Menu1");
                final Menu menu2 = new Menu("Menu2");
                final Menu menu3 = new Menu("Menu3");
                MenuBar menuBar = new MenuBar();
                menuBar.getMenus().addAll(menu1, menu2, menu3);
                grid.add(menuBar, 0, 0);
                grid.setHgrow(menuBar, Priority.ALWAYS);

                //Second grid
                GridPane grid2 = new GridPane();

                //Buttons
                Button b1 = new Button("ButtonI1");
                Button b2 = new Button("ButtonI2");
                Button b3 = new Button("ButtonI3");
                grid2.add(b1, 0, 0);
                grid2.add(b2, 0, 1);
                grid2.add(b3, 0, 2);

                //TitledPanes
                TitledPane tp1 = new TitledPane("TitledPane1", new Button("Button1"));
                TitledPane tp2 = new TitledPane("TitledPane2", new Button("Button2"));
                TitledPane tp3 = new TitledPane("TitledPane3", new Button("Button3"));
                grid2.add(tp1, 1, 0);
                grid2.add(tp2, 1, 1);
                grid2.add(tp3, 1, 2);
                grid2.setHgrow(tp1, Priority.ALWAYS);
                grid2.setHgrow(tp2, Priority.ALWAYS);
                grid2.setHgrow(tp3, Priority.ALWAYS);

                ScrollPane sp = new ScrollPane(grid2);
            grid.add(sp, 0, 1);
                grid.setHgrow(sp, Priority.ALWAYS);

                panel.setScene(scene);
                wait = false;
            }
        });
        this.getContentPane().add(panel);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(500, 500);
        this.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new MainGUI6();
            }
        });
    }
}
4

1 回答 1

3

ScrollPane缺少以下内容:

sp.setFitToWidth(true);

引用相应的 API 文档:

如果为 true 并且包含的​​节点是 Resizable,则节点将保持调整大小以匹配 ScrollPane 视口的宽度。如果包含的节点不是 Resizable,则忽略此值。

于 2014-12-30T09:02:27.467 回答