GridBagLayoutとGridBagConstraints


自分が小さなプログラムを作りたいのに、レイアウトが難しくなって、FlowLayoutやBorderLayoutなどの機能を使うのは強くなく、GridBagLayoutを使うのはできないので、ドキュメントに助けを求めるしかありません.
ドキュメントはこのレイアウトマネージャについて詳しく説明していますが、最も苦痛なのは英語です.しかし、幸いなことに実例があり、ネットで実例を調べ、推敲した結果、GridBagLayoutの使用について成型的な理解が得られ、皆さんと共有することができました.
GridBagLayoutは柔軟なレイアウトマネージャであり、コンポーネントを追加するにはGridBagConstraintsを使用する必要があります.いくつかのパラメータがあります.以下のように説明します.
gridx/gridy:コンポーネントの横長座標
gridwidth:コンポーネントが占める列数も、コンポーネントの幅です.
gridheight:コンポーネントが占める行数も、コンポーネントの高さです.
Fill:コンポーネントがそのグリッド内に存在し、そのグリッドを満たすことができない場合、fillの値によって充填方式を設定し、4つの値があります.
ipadx:コンポーネント間の横方向の間隔
ipady:コンポーネント間の縦間隔
insets:コンポーネントがグリッドを満たすことができない場合、insetsによって周囲(すなわち上下左右)に残る隙間を指定します.
anchor:同様に、コンポーネントがそのグリッドを満たすことができない場合、anchorによってコンポーネントの位置を設定します.anchorには2つの値があります.絶対値と相対値はそれぞれいくつかあります.ドキュメントにはあります.自分で表示できます.
Weightx:行の重み、この属性によって行の残りのスペースをどのように割り当てるかを決定します.
Weighty:カラムの重み、このプロパティによってカラムの空き領域をどのように割り当てるかを決定します.
 
それともドキュメントが実用的で、例を使って話しますか.
import java.awt.*;
 import java.util.*;
 import java.applet.Applet;
 
 public class GridBagEx1 extends Applet {
 
     protected void makebutton(String name,
                               GridBagLayout gridbag,
                               GridBagConstraints c) {
         Button button = new Button(name);
         gridbag.setConstraints(button, c);
         add(button);
     }
 
     public void init() {
         GridBagLayout gridbag = new GridBagLayout();
         GridBagConstraints c = new GridBagConstraints();
 
         setFont(new Font("SansSerif", Font.PLAIN, 14));
         setLayout(gridbag);
 
         c.fill = GridBagConstraints.BOTH;
         c.weightx = 1.0;
         makebutton("Button1", gridbag, c);
         makebutton("Button2", gridbag, c);
         makebutton("Button3", gridbag, c);
 
       c.gridwidth = GridBagConstraints.REMAINDER;//end row
         makebutton("Button4", gridbag, c);
 
         c.weightx = 0.0;  //reset to the default
         makebutton("Button5", gridbag, c);//another row
 
    c.gridwidth = GridBagConstraints.RELATIVE;//next-to-last in row
         makebutton("Button6", gridbag, c);
 
    c.gridwidth = GridBagConstraints.REMAINDER;//end row
         makebutton("Button7", gridbag, c);
 
    c.gridwidth = 1;    //reset to the default
    c.gridheight = 2;
         c.weighty = 1.0;
         makebutton("Button8", gridbag, c);
 
         c.weighty = 0.0;  //reset to the default
    c.gridwidth = GridBagConstraints.REMAINDER;//end row
    c.gridheight = 1;  //reset to the default
         makebutton("Button9", gridbag, c);
         makebutton("Button10", gridbag, c);
 
         setSize(300, 100);
     }
 
     public static void main(String args[]) {
    Frame f = new Frame("GridBag Layout Example");
    GridBagEx1 ex1 = new GridBagEx1();
 
    ex1.init();
 
    f.add("Center", ex1);
    f.pack();
    f.setSize(f.getPreferredSize());
    f.setVisible(true);
     }
 }
 
自分で実行して結果を表示できます
ドキュメントの各ボタンのパラメータ設定は、次のように説明されています.
  • Button1, Button2, Button3: weightx = 1.0
  • Button4: weightx = 1.0 , gridwidth = GridBagConstraints.REMAINDER
  • Button5: gridwidth = GridBagConstraints.REMAINDER
  • Button6: gridwidth = GridBagConstraints.RELATIVE
  • Button7: gridwidth = GridBagConstraints.REMAINDER
  • Button8: gridheight = 2 , weighty = 1.0
  • Button9, Button 10: gridwidth = GridBagConstraints.REMAINDER

  • プログラムと実行結果、そしてそのパラメータ設定を照らし合わせて、私の理解は以下の通りです.
    1行目:1行目に4つのボタンがあるのは、weightx=1.0であるため、前のボタンの後にボタンを加え続けることができ、button 4が行末になるのはgridwidth=GridBagConstraintsである.REMAINDER、この言葉で行の末尾を設定します.
    2行目:1行目に末尾がある以上、ボタンを追加すると必ず別の行になります.このときbutton 5が追加され、button 5はまた本行の最後(gridwidth=GridBagConstraints.REMAINDER)に設定されています.加えて2行目の最初のボタンなので、2行目にボタンが1つしかないのがbutton 5です.
    3行目:button 6は避けられない最初のボタンとなり、gridwidth=GridBagConstraintsが設定されている.RELATIVEは、button 6がその前のボタンと最後のボタンに隣接していることを示しています.つまり、最後から2番目のボタンに違いありません(最後のボタンの出現に備えています).button 7が現れ、gridwidth=GridBagConstraints.REMAINDERがあるため、3行目に口を閉じました.3行目が終わります.
    4行目:この行には特殊なボタンbutton 8があり、その設定はgridheight = 2weighty = 1.0, ( )。 , button9 , gridwidth = GridBagConstraints.REMAINDER, 。
    5行目:この行button 8はすでに1番目の位置を占めている(button 8のgridheight=2のため)ため、後のbutton 10は2番目に加算され、同様にgridwidth=GridBagConstraints.REMAINDER、5行目の封口のためである.
    GridBagLayoutを理解するには、例の理解から始めたほうがいいです.ほほほ.
    ネット上にはそれを紹介する文章がいくつかありますが、皆さんも参考にしてください.
    http://blog.163.com/everlee@126/blog/static/263574220089621157826/
    http://hi.baidu.com/zml1003/blog/item/43728f6ee02a7bd980cb4afc.html