2017-03-04 78 views
1

我想使蓝色组件填充白色间隙。我试图使用gridheight = 2并没有发生任何事情。我看到的方式是有三个单元格,我希望组件扩展到第四个不存在的单元格。我怎样才能解决它?使用GridBagLayout使组件跨越多行

enter image description here

import java.awt.Color; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class GUIFrame extends JFrame 
{ 

public GUIFrame(String title) 
{ 
    super(title); 
} 

public void init() 
{ 
    setLayout(new GridBagLayout()); 
    GridBagConstraints gbConstraints = new GridBagConstraints(); 

    DisplayPanel display = new DisplayPanel(); 
    ControlPanel control = new ControlPanel(); 
    GalleryPanel gallery = new GalleryPanel(); 


    gbConstraints.gridx = 0; 
    gbConstraints.gridy = 0; 
    gbConstraints.weightx = 0.8; 
    gbConstraints.weighty = 0.75; 
    gbConstraints.fill=gbConstraints.BOTH; 
    add(display,gbConstraints); 

    gbConstraints.gridx = 1; 
    gbConstraints.gridy = 0; 
    gbConstraints.weightx = 0.2; 
    gbConstraints.weighty = 0.75; 
    gbConstraints.fill=gbConstraints.BOTH; 
    add(gallery,gbConstraints); 


    gbConstraints.gridx = 0; 
    gbConstraints.gridy = 1; 
    gbConstraints.weightx = 1; 
    gbConstraints.weighty = 0.3; 
    gbConstraints.fill=gbConstraints.BOTH; 
    add(control,gbConstraints); 




    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setSize(1600,900); 
    setVisible(true); 
} 


} 
+0

我使用的GridBagConstraints对象 –

回答

3

的调整标准是简单的:

Grid Height = 1  
----------------------- 
| 0.7 width | 0.3 |-----> Grid Height = 2 
| 0.7 height | w | 
----------------| 1.0 | 
| 0.7 w 0.3 h | h | 
----------------------- 
     | 
    Grid Height = 1 

这里是一个工作示例:

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

public class GridBagLayoutExample { 

    private final int hGap = 5; 
    private final int vGap = 5; 

    private GridBagConstraints gbc; 

    public GridBagLayoutExample() { 
     gbc = new GridBagConstraints(); 
     gbc.anchor = GridBagConstraints.FIRST_LINE_START; 
     gbc.insets = new Insets(hGap, vGap, hGap, vGap); 
    } 

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

     JPanel contentPane = getPanel (Color.WHITE); 
     contentPane.setLayout (new GridBagLayout()); 

     JPanel blackPanel = getPanel (Color.BLACK); 
     addComp (contentPane, blackPanel, 0, 0, 1, 1 
          , GridBagConstraints.BOTH, 0.7, 0.7); 

     JPanel grayPanel = getPanel (Color.GRAY); 
     addComp (contentPane, grayPanel, 0, 1, 1, 1 
          , GridBagConstraints.BOTH, 0.7, 0.3); 

     JPanel bluePanel = getPanel (Color.BLUE); 
     addComp (contentPane, bluePanel, 1, 0, 1, 2 
          , GridBagConstraints.BOTH, 0.3, 1.0); 

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

    private void addComp(JPanel panel, JComponent comp 
           , int x, int y, int gWidth 
            , int gHeight, int fill 
             , double weightx, double weighty) { 
     gbc.gridx = x; 
     gbc.gridy = y; 
     gbc.gridwidth = gWidth; 
     gbc.gridheight = gHeight; 
     gbc.fill = fill; 
     gbc.weightx = weightx; 
     gbc.weighty = weighty;  

     panel.add(comp, gbc); 
    } 

    private JPanel getPanel (Color bColor) { 
     JPanel panel = new JPanel(); 
     panel.setOpaque (true); 
     panel.setBackground (bColor); 

     return panel; 
    } 

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