java GridBagConstraints解析

來源:互聯網
上載者:User

說明:GridBagLayout只有一個無參的構造器,要使用它就必須用setConstraints(Component comp,GridBagConstraints constraints)將它和GridBagConstraints關聯起來!當GridBagLayout與無參的GridBagConstraints關聯時,此時它就相當於一個GridLayout,只不過,用GridLayout布局的組件會隨著視窗的變 大(小)而變 大(小)。但GridBagLayout 不會,因此,這就是我們使用GridBagConstants來設定各個約束條件的目的!


      查看API文檔,我們就知道GridBagConstraints有十一個屬性!自我感覺API文檔裡面有些東西講得不是很好理解,就象gridx 與 gridy 這兩個屬性一樣,有些書上說gridx表示行,gridy表示列!API文檔裡面更是講了一大堆。
     現在,提供本人對這些屬性的理解:

   1,   gridx: 表示組件的左邊緣與網格左部之間的距離,如果學過HTML的話,那麼gridx就 相當於HTML 裡面的leftmargin屬性。

   2,   gridy:   表示組件的上邊緣與網格頂部之間的距離,相當於HTML裡面的topmargin屬性!
  
   3,    ipadx:   表示組件在預設的大小上,往水平方向上再加上多少像素的大小!
  
   4,   ipady:   表示組件在預設的大小上,往垂直方向上再加上多少像素的大小!

   5,     fill:   當組件沒有空間大時。它可以確定是否填充空間!

   6,   anchor:   當組件沒有空間大時。它可以確定在顯示地區中放置組件的位置!

   7, insets:   設定組件之間彼此的間距,它有四個參數,分別是上,左,下,右,

預設值為(0,0,0,0)  

            
   8,weightx:   用來設定當視窗變大時,各組件沿水平方向跟著變大的比例,數字越大,表示組件能得到的空間越大

   9,weighty:   用來設定當視窗變大時,各組件沿垂直方向跟著變大的比例,數字越大,表示組件能得                  到的空間越大

10,gridwidth   用來設定組件所佔的單位長度,預設值為1。

11,gridheight 用來設定組件所佔的單位高度,預設值為1。  


   對gridwidth與gridheight做了修改後,必須記得要對fill屬性做相應的修改,否則組件所顯示的大小     還是原來的大小。
  
===========================================================================================
      建議:運用GridBagLayout這種布局方式時,比較適合於把所有的組件圍成一個四邊形。所以,我們在設計這種布局方式前,可以先在紙上畫一下每個組件的大概位置,然後保證每一行的長度(即每一行的gridwidth之和)都相等,且每一列的長度(即每一列的gridheight之和)也相等,這樣,就能按我們要的藍圖而得到實現! 另外,有些屬性是要跟另外一些屬性搭配著用的,只有把相聯絡的屬性都做了相應的修改,我們才能看到變化!比如說上面所說到的gridwidth與gridheight必須與fill屬性聯合起來用才能看到結果!

下面來個實際的例子:


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

public class Test { 
   public static void main(String[] args) { 
       JFrame f = new JFrame("Test");
      
       JButton b1 = new JButton("Button1");
       JButton b2 = new JButton("Button2");
       JButton b3 = new JButton("Button3");
       JButton b4 = new JButton("Button4");
       JButton b5 = new JButton("Button5");
       JButton b6 = new JButton("Button6");
       JButton b7 = new JButton("Button7");
      
       GridBagConstraints c = new GridBagConstraints();
       GridBagLayout g = new GridBagLayout();
      
       f.setLayout(g);
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
      
       f.add(b1);   //由於屬性都有預設值,前面的按預設值來加入!
       f.add(b2);
       f.add(b3);

       c.gridy = 1;
       c.gridwidth = 3 ;   //修改了gridwidth值
       c.fill = GridBagConstraints.BOTH; //所以這裡要做相應的修改才能按gridwidth的值來顯示
       g.setConstraints(b4,c);
       f.add(b4);
      
       c = new GridBagConstraints();
       c.gridy = 2;
       g.setConstraints(b5,c);
       f.add(b5);
      
       c = new GridBagConstraints();
       c.gridy = 3;
       g.setConstraints(b6,c);
       f.add(b6);
      
      
       c = new GridBagConstraints();
       c.gridx = 1;
       c.gridy = 2;
       c.gridwidth = 2;
       c.gridheight = 2;
       c.fill = GridBagConstraints.BOTH;   //同上面的注釋
       g.setConstraints(b7,c);
       f.add(b7);
      
       f.pack();
       f.setVisible(true);
   }

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.