2016-11-03 2 views
0

GridBagLayoutを使用して、次のようにパネルを配置します。私はすべてを一番上に揃えたい。私は私のbackgroundpanel(JP)にBorderLayout.NORTHを使用してこれを管理することができますが、その後backgroundpanel doesntのは、私はGridBagLayoutのを使用してトップに私のパネルを揃えることができますどのようにウィンドウにGridBagLayoutでコンテンツを一番上に整える

を埋めますか?

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class Test extends JFrame { 

    JPanel jp = new JPanel(); 
    JPanel jp1 = new JPanel(); 
    JPanel jp2 = new JPanel(); 
    JPanel jp3 = new JPanel(); 
    JPanel jp4 = new JPanel(); 

    public Test() { 
     jp1.setPreferredSize(new Dimension(100, 100)); 
     jp2.setPreferredSize(new Dimension(100, 100)); 
     jp3.setPreferredSize(new Dimension(100, 100)); 
     jp4.setPreferredSize(new Dimension(100, 100)); 

     jp1.setBackground(Color.red); 
     jp2.setBackground(Color.blue); 
     jp3.setBackground(Color.yellow); 
     jp4.setBackground(Color.green); 

     GridBagLayout g = new GridBagLayout(); 
     jp.setLayout(g); 
     jp.setBackground(Color.BLACK); 

     GridBagConstraints con; 
     con = new GridBagConstraints(); 
     con.insets = new Insets(3, 3, 3, 3); // top, left, bottom, right 

     // PANEL ONE 
     con.gridx = 0; 
     con.gridy = 0; 
     g.setConstraints(jp1, con); 
     jp.add(jp1); 

     // PANEL TWO 
     con.gridx = 1; 
     con.gridy = 0; 
     g.setConstraints(jp2, con); 
     jp.add(jp2); 

     // PANEL THREE 
     con.gridx = 0; 
     con.gridy = 1; 
     g.setConstraints(jp3, con); 
     jp.add(jp3); 

     // PANEL FOUR 
     con.gridx = 1; 
     con.gridy = 1; 
     g.setConstraints(jp4, con); 
     jp.add(jp4); 

     this.setSize(600, 300); 
     // I CAN MANAGE TO GET THE PANELS ALIGNED TO THE TOP BY USING BORDERLAYOUT 
     // LIKE BELOW BUT THEN THE BACKGROUNDPANEL DOESNT FILL THE WINDOW 
     // this.add(jp, BorderLayout.NORTH); 

     this.add(jp); 
    } 

    public static void main(String[] args) { 
     new Test().setVisible(true); 
    } 
} 

答えて

2

いますが、backgroundPanelウィンドウをいっぱいにしたいんなぜ、backgroundpanel doesntのは、ウィンドウに

を埋めますか?

あなたがちょうどあなたが行うことができ、その後、黒の背景にしたい場合:

//this.add(jp); 
this.getContentPane().setBackground(jp.getBackground()); 
this.add(jp, BorderLayout.NORTH); 

それとも、「アンカー」と「重い」contraintsを指定する必要のGridBagLayoutを使用して:

con.gridx = 0; 
con.gridy = 0; 
con.anchor = ...; 

... 

con.gridx = 1; 
con.gridy = 1; 
con.weighty = ...; 

読みますHow to Use GridBagLayoutのSwingチュートリアルのセクションで、これらの制約が何をするかを理解してください。私はあなたが使用する必要がある制約と、あなたの例にそれらをどこに含めるべきかを示しました。 JPanelのパネルに追加された構成要素の大きさを尊重しFlowLayoutのを使用してデフォルトで

JPanel wrapper = new JPanel(); 
wrapper.setBackground(Color.BLACK); 
wrapper.add(jp); 
this.add(wrapper); 

別のアプローチは、ラッパー・パネルを使用することです。

関連する問題