开发者

how do I build a layout that resizes dynamically in java?

I need to know how to build a java layout that will be dynamically resized. The layout is set up with 4 panels, stacked top to bottom:

the top panel is a GridLayout(4,2). each rown is a label and a text field the second panel is a single button the third panel is a grid layout (n,2). I will get to n in a minute the bottom panel is also a single button

the n is a dynamically changing number. the third panel contains a text field, then a panel with 2 buttons to the right. the problem I have is that I need to be able to add and remove these rows and have the JFrame resize automatically as I do. I tried setting the Frame as a GridLayout(4,1), but when I change the size on actionPerformed(), it spreads the extra space evenly. I want to add only space to the third panel.

Thanks

EDIT: ActionPerformed Method

public void actionPerformed(ActionEvent e) {
    Object src = e.getSource();

    if (src == addTarget) {
        targetChoosers.add(new JFileChooser(new File("C:\\")));
        targets.add(new JTextField());
        targetButtons.add(new JButton("Browse..."));
        targetDeleters.add(new JButton("Delete"));

        int numTargets = targets.size();
        targetButtons.get(numTargets - 1).addActionListener(this);
        targetDeleters.get(numTargets - 1).addActionListener(this);

        bottomPanel.setLayout(new GridLayout(numTargets, 2));
        bottomPanel.add(targets.get(numTargets - 1));

        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(1, 2));
        panel.add(targetButtons.get(numTargets - 1));
        panel.add(tar开发者_JAVA技巧getDeleters.get(numTargets - 1));

        bottomPanel.add(panel);
    } 

    //...

    else if (targetDeleters.contains(src)) {
        int index = targetDeleters.indexOf(src);

        targets.remove(index);
        targetChoosers.remove(index);
        targetButtons.remove(index);
        targetDeleters.remove(index);

        this.remove(submit);
        this.remove(bottomPanel);

        int numTargets = targets.size();
        bottomPanel = new JPanel(new GridLayout(numTargets, 2));

        for (int i = 0; i < targets.size(); i++) {
            bottomPanel.add(targets.get(i));

            JPanel panel = new JPanel();
            panel.setLayout(new GridLayout(1, 2));
            panel.add(targetButtons.get(i));
            panel.add(targetDeleters.get(i));

            bottomPanel.add(panel);
        }

        this.add(bottomPanel);
        this.add(submit);
    }

    //...   

    pack();

    invalidate();
    validate();
}


GridBagLayout may help for the (n,2) problem.


Another great LayoutManager is MigLayout.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜