Как создать макет, который динамически изменяет размер в Java? - PullRequest
2 голосов
/ 09 сентября 2011

Мне нужно знать, как создать макет Java, который будет динамически изменен.Макет состоит из 4 панелей, расположенных сверху вниз:

, верхняя панель представляет собой GridLayout (4,2).каждая строка представляет собой метку и текстовое поле; вторая панель - это одиночная кнопка; третья панель - это сетка (n, 2).Я доберусь через минуту, нижняя панель - это и единственная кнопка

n - это динамически изменяющееся число.третья панель содержит текстовое поле, затем панель с двумя кнопками справа.проблема в том, что мне нужно иметь возможность добавлять и удалять эти строки и автоматически изменять размер JFrame, как и я.Я попытался установить Frame как GridLayout (4,1), но когда я изменяю размер в actionPerformed (), он равномерно распределяет дополнительное пространство.Я хочу добавить только место на третьей панели.

Спасибо

РЕДАКТИРОВАТЬ: 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(targetDeleters.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();
}

Ответы [ 2 ]

1 голос
/ 09 сентября 2011

GridBagLayout может помочь в решении проблемы (n, 2).

0 голосов
/ 03 октября 2013

Еще один замечательный LayoutManager - MigLayout .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...