3

我用从数据库中读取的动态内容填充 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,而不是 revalidate(); 重绘();但我不喜欢这种方法。那么有没有更好的方法呢?

如果我的问题不清楚,这是一张图片: 在此处输入图像描述

我现在在做什么:

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;
}
4

1 回答 1

2

如果您不需要 的任何其他特殊功能,则GridBagLayout可以使用 aBorderLayout代替,其中“北”部分是嵌入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);
    }
}
于 2013-08-06T10:06:30.860 回答