我尝试使用GridPane创建登录UI。我的窗口打开300 x 300&我已经设置了行&列索引到某些值,以便我的文本和#34;用户ID" &安培; " PASSWORD"出现在窗口的中心(与所有四边相等的距离)。它看起来像这样
当我最大化窗口时出现问题,这两个字段(USER ID& PASSWORD)不再停留在最大化窗口的中心。这导致了这个
我尝试将GridPane放在BorderPane的中心,但没有成功。我如何让这两个人始终保持自己的位置?
这里有以下代码:
void tryGridPaneFunc()
{
main.setTitle("GridPane Try");
BorderPane root = new BorderPane();
GridPane grid = new GridPane();
Text usr = new Text("USER ID:");
Text pwd = new Text("PASSWORD:");
grid.add(usr, 18,20);
grid.add(pwd, 18, 21);
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets(20));
//grid.setGridLinesVisible(true);
HBox empty1 = new HBox();
empty1.setPadding(new Insets(40));
HBox empty2 = new HBox();
empty2.setPadding(new Insets(40));
HBox empty3 = new HBox();
empty3.setPadding(new Insets(40));
HBox empty4 = new HBox();
empty4.setPadding(new Insets(40));
empty1.setHgrow(empty1, Priority.ALWAYS);
empty2.setHgrow(empty1, Priority.ALWAYS);
empty3.setHgrow(empty1, Priority.ALWAYS);
empty4.setHgrow(empty1, Priority.ALWAYS);
root.setTop(empty1);
root.setBottom(empty2);
root.setLeft(empty3);
root.setRight(empty4);
root.setCenter(grid);
Scene msc = new Scene(root,500,500);
main.setScene(msc);
main.show();
}
如果这些帖子已经存在,我很抱歉。当我搜索时,它们并没有显示出来。因此,如果您发现任何问题,请提供链接。
感谢您宝贵的时间。
答案 0 :(得分:1)
添加空白区域并在网格窗格中使用空行和列不是必需的。 GridPane
有一个alignment property用于设置网格窗格宽度和高度内网格的对齐方式。"。所以你需要的只是grid.setAlignment(Pos.CENTER);
。
SSCCE:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class CenteredGridPane extends Application {
@Override
public void start(Stage main) {
main.setTitle("GridPane Try");
GridPane grid = new GridPane();
Text usr = new Text("USER ID:");
Text pwd = new Text("PASSWORD:");
grid.add(usr, 0, 0);
grid.add(pwd, 0, 1);
grid.setHgap(10);
grid.setVgap(10);
grid.setAlignment(Pos.CENTER);
Scene msc = new Scene(grid,500,500);
main.setScene(msc);
main.show();
}
public static void main(String[] args) {
launch(args);
}
}