Java GridBagLayout-向约束添加边距,以将组件从中心移动到顶部
我正在开发我的第一个应用程序来实践布局管理器,我开始学习GridBagLayout,我想创建一个带有徽标和登录框的登录窗口 当前我的应用程序如下所示:Java GridBagLayout-向约束添加边距,以将组件从中心移动到顶部,java,swing,user-interface,layout-manager,gridbaglayout,Java,Swing,User Interface,Layout Manager,Gridbaglayout,我正在开发我的第一个应用程序来实践布局管理器,我开始学习GridBagLayout,我想创建一个带有徽标和登录框的登录窗口 当前我的应用程序如下所示: (来源:) 我觉得logo离登录框太近了,离顶部太远了,因此我需要找到一种方法,从底部给logo留一个边距,这样它就有点向顶部移动,所以两个组件之间会有一个空间,logo就在顶部栏附近 可以使用GridBagLayout吗 我尝试过将Insets设置为0,0,0,110,但它会将徽标向左移动一点,不知道为什么 @Override public
(来源:) 我觉得logo离登录框太近了,离顶部太远了,因此我需要找到一种方法,从底部给logo留一个边距,这样它就有点向顶部移动,所以两个组件之间会有一个空间,logo就在顶部栏附近 可以使用GridBagLayout吗 我尝试过将Insets设置为
0,0,0,110
,但它会将徽标向左移动一点,不知道为什么
@Override
public void init() throws Exception {
GridBagLayout layout = new GridBagLayout();
super.setLayout(layout);
this.loginPane = new JPanel();
this.loginPane.setSize(400, 400);
this.loginPane.setBackground(Color.RED);
JTextField username = new JTextField();
username.setSize(200, 45);
BufferedImage logo = ImageIO.read(new File("assets/logo.png"));
JLabel logoLabel = new JLabel(new ImageIcon(logo));
GridBagConstraints t = new GridBagConstraints();
t.ipadx = logo.getWidth();
t.ipady = logo.getHeight();
t.gridx = 0;
t.gridy = 0;
super.add(logoLabel, t);
t.ipadx = 500;
t.ipady = 300;
t.gridwidth = 1;
t.gridheight = 1;
t.gridy++;
super.add(loginPane, t);
}
如何执行此操作?可以使用其他属性更好地控制组件的宽度和高度(以百分比为单位)
- 指定如何分配额外的水平空间
- 指定如何分配额外的垂直空间
t.weighty=0.5
将在50%-50%之间分割,并将组件也放置在中心。让我知道它是否符合你的需要
- 使用符合组件首选尺寸的
frame.pack()
而不是frame.setSize()
- 重写
getPreferredSize()
以设置JPanel
的首选大小,而不是使用setSize()
方法
示例代码:
JPanel panel = new JPanel() {
@Override
public Dimension getPreferredSize() {
return new Dimension(..., ...);
}
};
我尝试将Insets设置为0、0、0、110,它会将徽标移动到
左边一点,不知道为什么
@Override
public void init() throws Exception {
GridBagLayout layout = new GridBagLayout();
super.setLayout(layout);
this.loginPane = new JPanel();
this.loginPane.setSize(400, 400);
this.loginPane.setBackground(Color.RED);
JTextField username = new JTextField();
username.setSize(200, 45);
BufferedImage logo = ImageIO.read(new File("assets/logo.png"));
JLabel logoLabel = new JLabel(new ImageIcon(logo));
GridBagConstraints t = new GridBagConstraints();
t.ipadx = logo.getWidth();
t.ipady = logo.getHeight();
t.gridx = 0;
t.gridy = 0;
super.add(logoLabel, t);
t.ipadx = 500;
t.ipady = 300;
t.gridwidth = 1;
t.gridheight = 1;
t.gridy++;
super.add(loginPane, t);
}
这是因为插图的顺序是:上、左、下、右
尝试0,0,110,0
将其从底部偏移。我本人是一个巨大的Swing开发人员,我要说的是:如果您正在花时间学习一个新的API,我建议您学习JavaFX而不是Swing。在这一点上,Swing几乎不受欢迎。