Javafx 网格 Pane 中心元素

标签 java javafx

我正在开发 javafx 应用程序。它的一部分包括使用网格元素的滚动 Pane 将列表渲染到 Gui 中。我正确获取了我需要的值,但我不知道如何使每个网格单元格居中。

// clear existing content if it exists  
    if(content.getChildren()!=null)
    {
        content.getChildren().clear();
    }
     // get Elements to display 
    OfferService os = new OfferService();
    List<Offer> myList = os.afficheroffre();
    UserService us = new UserService();

    GridPane Container = new GridPane();  // main container for all data specific to an offer
    Container.setAlignment(Pos.CENTER);

    // Scroll pane to display all the found contact requests
    ScrollPane scrollPane = new ScrollPane(Container);
    scrollPane.setPrefSize(900, 630);
    scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);

    AnchorPane.setTopAnchor(scrollPane, 0.);
    Container.setPrefWidth(900);
    Container.setPrefHeight(630);

    content.setRightAnchor(scrollPane, 0.);
    content.setBottomAnchor(scrollPane, 0.);
    content.setLeftAnchor(scrollPane, 0.);

    Container.setPadding(new Insets(30,0,0,30));

    // iterate through all offers and create an offer element
    int i = 0;
    int j = 0;
    for (Offer o : myList)
    {
       final User u = us.getById(o.getIdOfferuser());
        //HBox : single with spacing
        HBox Hb = new HBox();
        //VBox : single
        VBox Vb = new VBox();

        ImageView img = new ImageView(new Image("/Uploads/" + o.getImageOffer()));

        Label name = new Label(o.getNameOffer());

        ImageView avatar = new ImageView(new Image("/Uploads/" + u.getAvatar()));

        Button profile = new Button(u.getFirstName());

        Label price = new Label(String.valueOf(o.getPriceOffer()));

        Rating rating = new Rating();
        HBox hbb = new HBox();
        Button reserve = new Button("Reserve");

        Button details = new Button("more details");
        hbb.getChildren().add(reserve);
        hbb.getChildren().add(details);

        Vb.getChildren().add(name);
        Vb.getChildren().add(avatar);
        Vb.getChildren().add(profile);
        Vb.getChildren().add(price);
        Vb.getChildren().add(rating);
        Vb.getChildren().add(hbb);

        Hb.getChildren().add(Vb);

        // Add all the service elements to the services container
        Container.add(img,i,j);
        Container.add(Hb, i, j);

        i++;
        if(i>2)
        {
            i = 0;
            j++;
        }
    }

基本上我有这个显示,我希望元素在 Hb 变量(HBox)内居中。我尝试了 Container.setAlignment(Pos.CENTER);但没有结果。非常感谢任何帮助enter image description here

最佳答案

您无法在 GridPane 级别设置每个单元格的对齐方式。您需要在列级别和行级别进行设置。

因此,对于添加的每一列,您需要添加如下列约束,以使其水平居中对齐:

ColumnConstraints col = new ColumnConstraints();
col.setHalignment(HPos.CENTER);
gridPane.getColumnConstraints().add(col);

对于添加的每一行,您需要添加如下行约束以使其垂直居中对齐:

RowConstraints row = new RowConstraints ();
row.setValignment(VPos.CENTER);
gridPane.getRowConstraints().add(row);

关于Javafx 网格 Pane 中心元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54858423/

相关文章:

css - 无法更改验证器的颜色 (RequiredFieldValidator) JavaFX (JFoenix)

java - 在 Java 泛型中使用 <?> 的 'good' 原因是什么?

java - 使用计时器在 JFreeChart 上闪烁 XYImageAnnotation

java - 我可以在 Java 中将正则表达式与 substring() 结合起来吗?

java - 线程内存泄漏的可能原因

JavaFX/TreeTableView : Relationship between Selection and Focus

SceneBuilder 中的 JavaFX 和 TableView

Android 中的 java.lang.nullpointer 错误

java - 我可以使用 JavaFX 原生构建工具拥有多个可执行文件吗?

javafx,拖动优化 - 各种想法