如何将GridBagLayout中的Swing组件垂直居顶显示?
解决Swing组件垂直居中改顶部对齐的问题
你的问题出在GridBagConstraints的weighty属性设置上——所有组件的weighty都设为0,这意味着GridBagLayout会把所有组件挤在面板垂直方向的中间位置,因为没有分配任何额外垂直空间的权重。
要把组件顶到面板顶部,只需要给最后一行的组件设置weighty = 1.0,让额外的垂直空间被分配到这一行的下方,从而把上面的组件推到顶部。
修改后的代码如下:
setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); Border border = BorderFactory.createTitledBorder(null, "Saisie", TitledBorder.CENTER, TitledBorder.TOP, new Font("times new roman",Font.BOLD,14),Color.GRAY); setBorder(border); gbc.gridx = 0; gbc.gridy = 0; gbc.gridwidth = 1; gbc.gridheight = 1; gbc.weightx = 0.; gbc.weighty = 0.; gbc.fill = GridBagConstraints.NONE; gbc.anchor = GridBagConstraints.LINE_END; gbc.insets = new Insets(3, 3, 3, 3); add(JLabel_ID, gbc); gbc.gridx = 1; gbc.gridy = 0; gbc.gridwidth = 1; gbc.gridheight = 1; gbc.weightx = 0.; gbc.weighty = 0.; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.anchor = GridBagConstraints.CENTER; gbc.insets = new Insets(3, 3, 3, 3); add(JTextField_ID, gbc); gbc.gridx = 0; gbc.gridy = 1; gbc.gridwidth = 1; gbc.gridheight = 1; gbc.weightx = 0.; gbc.weighty = 0.; gbc.fill = GridBagConstraints.NONE; gbc.anchor = GridBagConstraints.LINE_END; gbc.insets = new Insets(3, 3, 3, 3); add(JLabel_Nom, gbc); gbc.gridx = 1; gbc.gridy = 1; gbc.gridwidth = 1; gbc.gridheight = 1; gbc.weightx = 0.; // 关键修改:给最后一行的组件设置weighty为1.0 gbc.weighty = 1.0; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.anchor = GridBagConstraints.CENTER; gbc.insets = new Insets(3, 3, 3, 3); add(JTextField_Nom, gbc);
如果希望组件在垂直方向顶部对齐的同时,水平方向能填充可用空间,可以把对应组件的weightx设为1.0,配合fill = GridBagConstraints.HORIZONTAL使用,这是可选的优化设置。
内容的提问来源于stack exchange,提问作者nour tebbal
相关产品推荐
相关产品推荐

