2017-03-04 1 views
1

Ich möchte, dass die blaue Komponente die weiße Lücke füllt. Ich habe versucht, die Gridheight = 2 zu verwenden und nichts ist passiert. Ich sehe es so, dass es drei Zellen gibt und ich möchte, dass sich die Komponente in eine vierte Zelle ausdehnt, die nicht vorhanden ist. Wie kann ich es umgehen?Eine Komponente über mehrere Zeilen mit GridBagLayout erstellen

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

Ich bin mit einem GridBagConstraints Objekt –

Antwort

3

Die Anpassungskriterien ist einfach:

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 

Hier ist ein funktionierendes Beispiel:

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); 
    } 
} 
Verwandte Themen