2017-06-18 103 views
2

这里我使用的是面板上gridbag布局添加排列5行5级的部件,我希望他们有不同的高度like this但是这样做如何改变一个网格的最小高度在网格包布局

public void mainpanel3(){ 

    pupper.setBackground(Color.yellow); 
    ptable.setBackground(Color.BLACK); 
    lthird.setOpaque(true); 
    lthird.setBackground(Color.BLUE); 
    tffourth.setBackground(Color.GREEN); 
    pfifth.setBackground(Color.WHITE); 


    outerp3.setLayout(new GridBagLayout()); 
    GridBagConstraints c=new GridBagConstraints(); 


    c.weightx=0.5; 
    c.weighty=0.5; 
    c.fill=GridBagConstraints.BOTH; 

    c.weightx=0.5; 
    c.weighty=0.1; 
    c.ipady=5; 
    c.gridx=0; 
    c.gridy=0;  
    outerp3.add(pupper,c); 

    c.weightx=0.5; 
    c.weighty=0.4; 
    c.ipady=20; 
    c.gridx=0; 
    c.gridy=1; 
    outerp3.add(ptable,c); 

    c.weightx=0.5; 
    c.weighty=0.1; 
    c.ipady=5; 
    c.gridx=0; 
    c.gridy=2; 
    outerp3.add(lthird,c); 

    c.weightx=0.5; 
    c.weighty=0.1; 
    c.ipady=5; 
    c.gridx=0; 
    c.gridy=3; 
    outerp3.add(tffourth,c); 

    c.weightx=0.5; 
    c.weighty=0.1; 
    c.ipady=5; 
    c.gridx=0; 
    c.gridy=4; 
    outerp3.add(pfifth,c); 

    } 

这发生

output

第五组分(a panel)颜色白色不显示出来。

关于此面板的编码仅在此方法中完成,请告诉我您是否需要其他任何代码。

+0

的'weighty'值的所有组件都是一样的。对于每个组件分别将它改为'0.1','0.5','0.1','0.2'和'0.1',以及'gridheight'属性 –

回答

3

你需要指定weighty值,虽然weightx永远是1.0每个组件,因为每个组件只术语不同的是height但不width。这是一个工作示例:

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

public class GridBagLayoutExample { 

    private GridBagConstraints m_GBC; 

    public GridBagLayoutExample() { 
     m_GBC = new GridBagConstraints(); 
     m_GBC.anchor = GridBagConstraints.FIRST_LINE_START; 
     m_GBC.fill = GridBagConstraints.BOTH; 
    } 

    private void displayGUI() { 
     JFrame frame = new JFrame ("GridBagLayout Example"); 
     frame.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE); 

     JPanel contentPane = new JPanel(); 
     contentPane.setLayout (new GridBagLayout()); 

     addComponent (contentPane, getPanel(), 0, 0, 1, 1, 1.0, 0.1); 
     addComponent (contentPane, getPanel(), 0, 1, 1, 5, 1.0, 0.5); 
     addComponent (contentPane, getPanel(), 0, 6, 1, 1, 1.0, 0.1); 
     addComponent (contentPane, getPanel(), 0, 7, 1, 2, 1.0, 0.2); 
     addComponent (contentPane, getPanel(), 0, 9, 1, 1, 1.0, 0.1); 

     frame.setContentPane (contentPane); 
     frame.pack(); 
     frame.setLocationByPlatform (true); 
     frame.setVisible (true); 
    } 

    private void addComponent (JComponent contentPane, JComponent component, 
           int x, int y, int gridwidth, int gridheight, 
           double weightx, double weighty) { 
     m_GBC.gridx = x; 
     m_GBC.gridy = y; 
     m_GBC.gridwidth = gridwidth; 
     m_GBC.gridheight = gridheight; 
     m_GBC.weightx = weightx; 
     m_GBC.weighty = weighty; 

     contentPane.add (component, m_GBC); 
    } 

    private JPanel getPanel() { 
     JPanel panel = new JPanel(); 
     panel.setOpaque (true); 
     Color color = new Color ((float) Math.random(), (float) Math.random(), 
           (float) Math.random(), (float) Math.random()); 
     panel.setBackground (color); 

     return panel; 
    } 

    public static void main (String [] args) { 
     Runnable runnable = new Runnable() { 
      @Override 
      public void run() { 
       new GridBagLayoutExample().displayGUI(); 
      } 
     }; 
     EventQueue.invokeLater (runnable); 
    } 
} 

输出

img