为了账号安全,请及时绑定邮箱和手机立即绑定

GridBagLayout - 意外添加/更改间距

GridBagLayout - 意外添加/更改间距

慕森王 2022-06-04 09:45:34
JTextAreas所以,当我添加面板时,面板(包含)之间的间距发生了变化,请参见这张图片。:D例子当一个按钮被按下时,第一次addTextArea()被调用。状态 1 -> 图中的状态 2。问题是 panel_buttons 与新添加的WorkDescription( JTextArea) 不太接近。并且当多次按下按钮时,它们之间的间距会发生变化。按钮之前做了很大的跳跃,但是有; c.weighty = 0.1 - 0.3跳跃更小。// The panel is placed in the center of a JFrame (BorderLayout)public CONSTRUCTOR {    JPanel panel = new JPanel(new GridBagLayout());    GridBagConstraints c = new GridBagConstraints();    // ...    c.anchor = GridBagConstraints.NORTHWEST;    c.gridx = 0;    c.gridy = 0;    c.weightx = 1;    c.weighty = 1;    c.gridwidth = 1;    c.gridheight = 1;    // this is how everything looks at (first pic) start.    panel.add(panel_buttons, c);   // panel_buttons is at the right place}添加一个新的方法WorkDescription,即a JTextArea:public void addTextArea() {    WorkDescription wd = new WorkDescription(); //WorkDescription extends JPanel    panel.remove(panel_buttons);     c.weighty = 0.25;       // I've messed around with the weighty alot.                            // 0.2-0.25 makes the panel_buttons do the least amout of 'down-jump'    panel.add(wd, c);    if(c.gridy < 3 ) {        c.gridy ++;        c.weighty = 1;        panel.add(panel_buttons, c);    }    panel.revalidate();    panel.repaint();}
查看完整描述

1 回答

?
米脂

TA贡献1836条经验 获得超3个赞

我发现的最佳解决方案是,


从 切换GridBagLayout到GridLayout。


private JPanel panel_Center = new JPanel(new GridLayout(5,1)); 

然后,当然,删除所有GridBagConstraints


public void addTextArea() {


    WorkDescription wd = new WorkDescription();


    panel.remove(panel_buttons); 

    panel.add(wd);


    if(addedWorks < 4 ) {       


        addedWorks++;

        panel.add(panel_buttons);


    }


    panel.revalidate();

    panel.repaint();

}


查看完整回答
反对 回复 2022-06-04
  • 1 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信