我需要知道如何构建一个动态调整大小的java布局。布局设置了4个面板,从顶部到底部堆叠:如何构建一个在java中动态调整大小的布局?
顶部面板是一个GridLayout(4,2)。每个rown是一个标签和一个文本字段 第二个面板是单个按钮 第三个面板是一个网格布局(n,2)。我会在一分钟内得到n 底部面板也是单个按钮
n是一个动态变化的数字。第三个面板包含一个文本字段,然后是一个右边有2个按钮的面板。我遇到的问题是我需要能够添加和删除这些行,并让JFrame像我一样自动调整大小。我尝试将Frame设置为GridLayout(4,1),但是当我更改actionPerformed()的大小时,它均匀地扩展了额外的空间。我想只为第三个面板添加空间。
感谢
编辑:actionPerformed方法
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();
}
请提供[sscce](http://sscce.org/),其中显示了如何在按钮侦听器中调用'pack()'。 – trashgod
@trashgod我已经发布了actionperformed方法(无论如何,相关部分)。我不确定pack()会如何帮助,因为GridLayout会自动将组件的大小设置为均匀分布在整个框架中 – ewok
@ewok然后在此处发布基于SSCCE的可运行代码,然后您将看到许多具有布局的奇迹:-) – mKorbel