java gui设置组件位置_Java GUI GridBagLayout布局生成的组件太小

没想到还有人邀请我看Swing的问题,确实上次用到Swing还是我大学刚学Java(。・∀・)ノ゙...

好久没看了,上午还是去简单熟悉了哈GridBagLayout,从最终展示效果来看,其实已经满足了题主GridBagConstraints的设置,只是问题应该是感觉整个panel不够大,因为现在的效果是按照每个组件最小的宽度和高度+匹配GridBagConstraints设置的值形成的

所以如果设置 weightx 和 weighty,确实可以调整额外空间的分布方式,但是调整之后,比如给JTextArea("文本区"),JButton("确定")和JButton("取消")分别设置一个weightx(50,20,40),确实大了,但是也铺满了。。。

2770a81043ec51ddf87c4bca5345b39a.png

铺满的原因也是因为默认的JFrame布局是BorderLayout,所以自动铺满了,因此想要居中的话,可以给这个布局中的EAST和WEST加一个隐藏的component,这样中间的panel就可以减少点宽度了,类似这样

a41a8282952955be24a834dc66b6ffa8.png

效果如下

15fa549950f94b93d06118a52c3b0da9.png

当然你还可以自己去调整两边的隐藏component宽度,找到一个合适的,同理高度也是一样。

我也不是很专业,可能还有很多其他方案,不过看起来现在我的方案大体满足要求吧,题主可以自行试试,我把代码放下面了,可以看看(我看题主虽然new了ButtonGroup,但是最终没有放到panel里,所以我下面代码干脆就删除了ButtonGrou部分,题主需要可以自行加上)public class TestDemo3 {

public static void main(String[] args) {

JFrame frame = new JFrame("我的窗体");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setSize(640, 640);

JPanel panel = new JPanel();

panel.setSize(640,640);

frame.setResizable(false);

frame.setLocationRelativeTo(null);

GridBagLayout gridBagLayout = new GridBagLayout();

panel.setLayout(gridBagLayout);

GridBagConstraints constraints = new GridBagConstraints();

constraints.fill = GridBagConstraints.BOTH;

constraints.weightx = 50;

constraints.gridx = 1;

constraints.gridy = 2;

constraints.gridwidth = 3;

constraints.gridheight = 3;

JTextArea textArea = new JTextArea("文本区");

gridBagLayout.setConstraints(textArea, constraints);

GridBagConstraints constraints1 = new GridBagConstraints();

constraints1.fill = GridBagConstraints.BOTH;

constraints1.weightx = 20;

constraints1.gridx = 4;

constraints1.gridy = 2;

constraints1.gridwidth = 1;

constraints1.gridheight = 1;

JButton buttonConfirm = new JButton("确定");

gridBagLayout.setConstraints(buttonConfirm, constraints1);

GridBagConstraints constraints2 = new GridBagConstraints();

constraints2.fill = GridBagConstraints.BOTH;

constraints2.weightx = 40;

constraints2.gridx = 5;

constraints2.gridy = 2;

constraints2.gridwidth = 2;

constraints2.gridheight = 1;

JButton buttonCancel = new JButton("取消");

gridBagLayout.setConstraints(buttonCancel, constraints2);

GridBagConstraints constraints3 = new GridBagConstraints();

constraints3.fill = GridBagConstraints.BOTH;

constraints3.gridx = 4;

constraints3.gridy = 3;

constraints3.gridwidth = 1;

constraints3.gridheight = 1;

JRadioButton buttonBold = new JRadioButton("粗体");

gridBagLayout.setConstraints(buttonBold, constraints3);

GridBagConstraints constraints4 = new GridBagConstraints();

constraints4.fill = GridBagConstraints.BOTH;

constraints4.gridx = 5;

constraints4.gridy = 3;

constraints4.gridwidth = 2;

constraints4.gridheight = 1;

JRadioButton buttonItalic = new JRadioButton("斜体");

gridBagLayout.setConstraints(buttonItalic, constraints4);

GridBagConstraints constraints5 = new GridBagConstraints();

constraints5.fill = GridBagConstraints.BOTH;

constraints5.gridx = 4;

constraints5.gridy = 4;

constraints5.gridwidth = 2;

constraints5.gridheight = 1;

JRadioButton buttonCommon = new JRadioButton("常规");

gridBagLayout.setConstraints(buttonCommon, constraints5);

GridBagConstraints constraints6 = new GridBagConstraints();

constraints6.fill = GridBagConstraints.BOTH;

constraints6.gridx = 5;

constraints6.gridy = 4;

constraints6.gridwidth = 2;

constraints6.gridheight = 1;

JRadioButton buttonBoldItalic = new JRadioButton("粗体/斜体");

gridBagLayout.setConstraints(buttonBoldItalic, constraints6);

GridBagConstraints constraints7 = new GridBagConstraints();

constraints7.fill = GridBagConstraints.BOTH;

constraints7.gridx = 1;

constraints7.gridy = 5;

constraints7.gridwidth = 6;

constraints7.gridheight = 1;

JTextField textField = new JTextField("输入你的姓名");

gridBagLayout.setConstraints(textField, constraints7);

panel.add(textArea);

panel.add(buttonConfirm);

panel.add(buttonCancel);

panel.add(buttonBold);

panel.add(buttonItalic);

panel.add(buttonCommon);

panel.add(buttonBoldItalic);

panel.add(textField);

frame.add(panel);

int gap = 120;

frame.add(Box.createHorizontalStrut(gap), BorderLayout.EAST);

frame.add(Box.createHorizontalStrut(gap), BorderLayout.WEST);

frame.setVisible(true);

}

}

`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值