首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >改变hbox节点位置

改变hbox节点位置
EN

Stack Overflow用户
提问于 2016-12-05 17:08:21
回答 3查看 9.1K关注 0票数 1

我想更改hbox中每个buttom的位置:

代码语言:javascript
复制
HBox buttom = new HBox();

Button delete_button = new Button("Delete");
Button showAll_button = new Button("Show All");
Button back_button = new Button("Back");

buttomPaneRight_deleteScene.getChildren().addAll(back_button,showAll_button,delete_button);

BorderPane basePane = new BorderPane();
basePane.setButtom(buttomPaneRight_deleteScene):

我想将每个按钮位置(例如,back_button )更改为左侧,将delete_buttonshowAll_button更改为右侧。我检查了setAlignment(Pos.Value);,但是这改变了整个hbox pos

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-05 17:23:20

一种解决方案(有很多种)就是将您想要的按钮放在另一个HBox中。

代码语言:javascript
复制
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;

public class LayoutExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        BorderPane root = new BorderPane();

        HBox hbox = new HBox();

        Button backButton = new Button("Back");
        Button deleteButton = new Button("Delete");
        Button showAllButton = new Button("Show All");

        HBox rightButtons = new HBox(deleteButton, showAllButton);
        rightButtons.setAlignment(Pos.CENTER_RIGHT);

        HBox.setHgrow(rightButtons, Priority.ALWAYS);

        hbox.getChildren().addAll(backButton, rightButtons);
        hbox.setPadding(new Insets(2));

        root.setBottom(hbox);
        Scene scene = new Scene(root, 600, 600);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

另一种解决方案是添加一个充当间隔器的Pane,并使其尽可能地增长:

代码语言:javascript
复制
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;

public class LayoutExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        BorderPane root = new BorderPane();

        HBox hbox = new HBox();

        Button backButton = new Button("Back");
        Button deleteButton = new Button("Delete");
        Button showAllButton = new Button("Show All");

        Pane spacer = new Pane();

        HBox.setHgrow(spacer, Priority.ALWAYS);

        hbox.getChildren().addAll(backButton, spacer, deleteButton, showAllButton);
        hbox.setPadding(new Insets(2));

        root.setBottom(hbox);
        Scene scene = new Scene(root, 600, 600);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

第三种解决方案是使用AnchorPane而不是HBox,并将右边的两个按钮放在HBox中。

代码语言:javascript
复制
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;

public class LayoutExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        BorderPane root = new BorderPane();

        AnchorPane anchorPane = new AnchorPane();

        Button backButton = new Button("Back");
        Button deleteButton = new Button("Delete");
        Button showAllButton = new Button("Show All");

        HBox rightButtons = new HBox(deleteButton, showAllButton);

        anchorPane.getChildren().addAll(backButton, rightButtons);

        AnchorPane.setBottomAnchor(rightButtons, 2.0);
        AnchorPane.setBottomAnchor(backButton, 2.0);

        AnchorPane.setLeftAnchor(backButton, 2.0);
        AnchorPane.setRightAnchor(rightButtons, 2.0);

        root.setBottom(anchorPane);
        Scene scene = new Scene(root, 600, 600);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

第四种解决方案是使用GridPane

代码语言:javascript
复制
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;

public class LayoutExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        BorderPane root = new BorderPane();

        GridPane gridPane = new GridPane();


        Button backButton = new Button("Back");
        Button deleteButton = new Button("Delete");
        Button showAllButton = new Button("Show All");

        gridPane.add(backButton, 0, 0);
        gridPane.add(deleteButton, 1, 0);
        gridPane.add(showAllButton, 2, 0);

        ColumnConstraints leftCol = new ColumnConstraints();
        leftCol.setHgrow(Priority.ALWAYS);

        gridPane.getColumnConstraints().addAll(leftCol, new ColumnConstraints(), new ColumnConstraints());

        gridPane.setPadding(new Insets(2));
        root.setBottom(gridPane);
        Scene scene = new Scene(root, 600, 600);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
票数 3
EN

Stack Overflow用户

发布于 2016-12-05 17:17:59

尝试使用不同的窗格选项,正如我前面提到的,GridPane应该解决您的问题,或者嵌套另一个HBox。

参见此layouts.htm

票数 2
EN

Stack Overflow用户

发布于 2016-12-05 17:17:43

基本上不使用HBoxAnchorPane更适合您想要实现的目标。

代码语言:javascript
复制
AnchorPane holder = new AnchorPane();

Button delete_button = new Button("Delete");
Button showAll_button = new Button("Show All");
Button back_button = new Button("Back");

// Add buttons to holder
holder.getChildren().add(delete_button);
holder.getChildren().add(showAll_button);
holder.getChildren().add(back_button);

// Delete top left
AnchorPane.setTopAnchor (delete_button, 0.0);
AnchorPane.setLeftAnchor(delete_button, 0.0);

// Show all top right
AnchorPane.setTopAnchor  (showAll_button, 0.0);
AnchorPane.setRightAnchor(showAll_button, 0.0);

// Back bottom right
AnchorPane.setBottomAnchor(back_button, 0.0);
AnchorPane.setRightAnchor (back_button, 0.0);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40979589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档