2013-11-21 66 views

回答

9
    以還原形式 GridBagLayout
  • ,但成功您的需求的80% - 20%

.

import java.awt.*; 
import javax.swing.*; 
import javax.swing.border.*; 

public class BorderPanels extends JFrame { 

    private static final long serialVersionUID = 1L; 

    public BorderPanels() { 
     setLayout(new GridBagLayout());// set LayoutManager 
     GridBagConstraints gbc = new GridBagConstraints(); 
     JPanel panel1 = new JPanel(); 
     Border eBorder = BorderFactory.createEtchedBorder(); 

     panel1.setBorder(BorderFactory.createTitledBorder(eBorder, "80pct")); 
     gbc.gridx = gbc.gridy = 0; 
     gbc.gridwidth = gbc.gridheight = 1; 
     gbc.fill = GridBagConstraints.BOTH; 
     gbc.anchor = GridBagConstraints.NORTHWEST; 
     gbc.weightx = gbc.weighty = 70; 
     add(panel1, gbc); // add component to the ContentPane 

     JPanel panel2 = new JPanel(); 
     panel2.setBorder(BorderFactory.createTitledBorder(eBorder, "20pct")); 
     gbc.gridy = 1; 
     gbc.weightx = gbc.weighty = 20; 
     gbc.insets = new Insets(2, 2, 2, 2); 
     add(panel2, gbc); // add component to the ContentPane 

     JPanel panel3 = new JPanel(); 
     panel3.setBorder(BorderFactory.createTitledBorder(eBorder, "20pct")); 
     gbc.gridx = 1; 
     gbc.gridy = 0; 
     gbc.gridwidth = 1; 
     gbc.gridheight = 2; 
     gbc.weightx = /*gbc.weighty = */ 20; 
     gbc.insets = new Insets(2, 2, 2, 2); 
     add(panel3, gbc); // add component to the ContentPane 

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // important 
     pack(); 
     setVisible(true); // important 
    } 

    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { // important 

      @Override 
      public void run() { 
       BorderPanels borderPanels = new BorderPanels(); 
      } 
     }); 
    } 
} 

  • 定製MigLayout
+0

現在你添加了一張圖片,我必須得票數;) – MadProgrammer

+0

特別是我的語法評論是非常好的我必須編輯那些.... – mKorbel

+0

總是認爲weightx/weighty是從0到1? – alex2410

2

沒有任何JDK佈局允許您直接執行此操作。 BoxLayout和GridBagLayout排序允許你這樣做。

使用GridBagLayout,您可以指定介於0和1之間的weightx/y值,該值指示佈局管理器如何分配額外空間。因此,假設您以80/20的比例創建首選尺寸的組件,它們應該能夠以相同的比例增長。

BoxLayout在這方面更容易使用,因爲您不需要指定它只是在首選大小比例中調整的特定約束。

對於一個簡單的佈局管理器,它被設計爲允許您指定相對大小作爲一個簡單的約束,您可以查看Relative Layout