2011-09-09 22 views
2

我需要知道如何构建一个动态调整大小的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(); 
} 
+4

请提供[sscce](http://sscce.org/),其中显示了如何在按钮侦听器中调用'pack()'。 – trashgod

+0

@trashgod我已经发布了actionperformed方法(无论如何,相关部分)。我不确定pack()会如何帮助,因为GridLayout会自动将组件的大小设置为均匀分布在整个框架中 – ewok

+0

@ewok然后在此处发布基于SSCCE的可运行代码,然后您将看到许多具有布局的奇迹:-) – mKorbel

回答

0

另一个伟大的LayoutManager是MigLayout

+0

虽然这个链接可能回答这个问题,但最好在这里包含答案的重要部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 – Ankur

+0

因为[MigLayout](http://www.miglayout.com/)是一个库,所以我不能写这么多行,我该如何解释一个库。 – Moshii

相关问题