Мне нужно знать, как создать макет 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();
}