java 如何在 JavaFX 中将按钮对齐到右下角?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/28446209/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-02 13:36:52  来源:igfitidea点击:

How to align a button into the bottom right corner in JavaFX?

javajavafx

提问by twilco

I'm extremely new to JavaFX, and I'm attempting to get a button(specifically scrapeBtn) into the bottom right corner of an application. Here is what I have so far:

我对 JavaFX 非常陌生,我正在尝试将按钮(特别是scrapeBtn)放入应用程序的右下角。这是我到目前为止所拥有的:

package main;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Driver extends Application {

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

    @Override
    public void start(Stage primaryStage) {

        Button scrapeBtn = new Button();
        scrapeBtn.setText("Scrape!");
        scrapeBtn.setOnAction(new EventHandler<ActionEvent>() {

            public void handle(ActionEvent event) {
                System.out.println("Scrape button pressed.");
            }
        });

        TextField console = new TextField();

        GridPane root = new GridPane();    

        GridPane.setConstraints(scrapeBtn, 2, 2, 1, 1);
        root.getChildren().add(scrapeBtn);

        root.getChildren().add(console);

        Scene scene = new Scene(root, 600, 400);

        primaryStage.setTitle("Wiki Scraper");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

}

Any ideas as to how I could accomplish this? Some tips in general to aligning and formatting things with JavaFX would also be really appreciated.

关于我如何做到这一点的任何想法?一些使用 JavaFX 对齐和格式化事物的一般提示也将非常感激。

Thanks.

谢谢。

回答by gfkri

I often use a BorderPanefor similar purposes (e.g. a Dialog with some text and controls etc. at the center and one or more buttons at the bottom). Therefore, I use the BorderPaneas root and a HBoxas "button container" at the bottom. Finally, I set the botton alignment to "RIGHT".

我经常将 aBorderPane用于类似的目的(例如,在中心带有一些文本和控件等,在底部带有一个或多个按钮的对话框)。因此,我在底部使用BorderPaneas root 和 aHBox作为“按钮容器”。最后,我将底部对齐设置为“RIGHT”。

Here an example based on your code:

这是基于您的代码的示例:

@Override
public void start(Stage primaryStage) {

    // center
    VBox vbCenter = new VBox(); // use any container as center pane e.g. VBox
    TextField console = new TextField();
    vbCenter.getChildren().add(console);

    // bottom respectively "button area"
    HBox hbButtons = new HBox();
    Button scrapeBtn = new Button();
    scrapeBtn.setText("Scrape!");
    scrapeBtn.setOnAction(new EventHandler<ActionEvent>() {

      public void handle(ActionEvent event) {
        System.out.println("Scrape button pressed.");
      }
    });
    hbButtons.getChildren().add(scrapeBtn);
    hbButtons.setAlignment(Pos.CENTER_RIGHT);

    // root
    BorderPane root = new BorderPane();
    root.setPadding(new Insets(20)); // space between elements and window border
    root.setCenter(vbCenter);
    root.setBottom(hbButtons);

    Scene scene = new Scene(root, 600, 400);

    primaryStage.setTitle("Wiki Scraper");
    primaryStage.setScene(scene);
    primaryStage.show();
}

This code leads to this (after resizing the window a little bit):

此代码导致此(在稍微调整窗口大小后):

Result

结果

回答by lelelo

You can use two BorderPanes to place a control bottom right

您可以使用两个 BorderPanes 在右下角放置一个控件

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

    BorderPane bottom = new BorderPane();
    bottom.setRight(new Button("I am placed bottom right"));
    root.setBottom(bottom);

    Scene scene = new Scene(root);
    primaryStage.setScene(scene);

    primaryStage.setWidth(400);
    primaryStage.setHeight(400);
    primaryStage.show();
}

enter image description here

在此处输入图片说明