我用从数据库读取的动态内容填充GridBagLayout JPanel。我的问题是,我能否找到一种将最后一个rowWeights设置为1.0的方法。通常,当我创建静态GridBagLayout面板时,我可以这样做:
GridBagLayout gbl_accPanel = new GridBagLayout();
gbl_accPanel.columnWeights = new double[]{1.0};
gbl_accPanel.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 1.0};
accPanel.setLayout(gbl_accPanel);但是现在,在我的例子中,我不知道我会有多少行,所以我需要一种将所有内容推到顶部的方法,这意味着使最后一行的权重1.0来填充我的容器的其余部分。
显然,我可以对添加的元素进行计数,而不是设置rowWeights,而不是重新验证();重新绘制();但我不喜欢这种方法。有什么更好的办法吗?
这是一张图片,如果我的问题不清楚:

我现在做的是:
public void setAccountRowWeights(int n)
{
weights = new double[n];
for(int i=0; i<n-1; ++i)
weights[i] = 0.0;
weights[n-1] = 1.0;
gbl_accPanel.rowWeights = weights;
}发布于 2013-08-06 10:06:30
如果不需要GridBagLayout的任何其他特殊特性,则可以使用BorderLayout,其中"north“部分是一个嵌入的GridLayout,具有未指定的行数(即”行“参数为0)。
public class LayoutTest implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new LayoutTest());
}
@Override
public void run() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(new BorderLayout());
JPanel north = new JPanel(new GridLayout(0, 1));
for (int i = 0; i < 5; ++i) {
JPanel p = new JPanel();
p.setPreferredSize(new Dimension(0, 25));
p.setBorder(new LineBorder(Color.BLACK, 1));
p.setBackground(Color.WHITE);
north.add(p);
}
f.add(north, BorderLayout.NORTH);
JPanel center = new JPanel();
center.setBackground(Color.RED);
f.add(center, BorderLayout.CENTER);
f.setSize(400, 400);
f.setVisible(true);
}
}https://stackoverflow.com/questions/18054357
复制相似问题