GridBagLayout - 意外 added/and 更改了间距
GridBagLayout - Unintended added/and changed spacing
所以,我在添加面板时遇到了面板间距更改(包含 JTextAreas
)的问题,请参阅此 picture。 :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
的方法,即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();
}
我找到的最好的解决方案是,
从 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();
}
所以,我在添加面板时遇到了面板间距更改(包含 JTextAreas
)的问题,请参阅此 picture。 :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
的方法,即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();
}
我找到的最好的解决方案是,
从 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();
}