<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    關于GridBagLayout網絡上一篇很好的文章

    GridBagLayout
    【常用構造函數】

        public GridBagLayout()

    【特點】:

          GridBagLayout是所有AWT布局管理器當中最復雜的,同時他的功能也是最強大的.這種現象源于它所提供的眾多的可配置選項,你幾乎可以完全地 控制容器的布局方式.盡管復雜性很明顯,只要理解了基本思想,就很容易使用GridBagLayout了.
          GridBagLayout從它的名字中你也可以猜到,它同GridLayout一樣,在容器中以網格形式來管理組件.但GridBagLayout功能 要來得強大得多.
    1、GridBagLayout管理的所有行和列都可以是大小不同的.
    2、GridLayout把每個組件限制到一個單元格,而GridLayout并不這樣:組件在容器中可以占據任意大小的矩形區(qū)域,
          GridBagLayout通常由一個專用類來對他布局行為進行約束,該類叫GridBagConstraints.其中的所有成員都是public的, 因此要學好如何使用GridBagLayout首先要了解有那些約束變量,以及如何設置這些約束變量.
    以下是GridBagConstraints的公有成員變量
      public int anchor
      public int fill
      public gridheight
      Public gridweight
      public girdx
      public gridy
      public Insets insets
      public int ipadx
      public int ipady
      public double weightx
      public double weighty
          看起來有很多約束需要進行設置,但事實上許多約束只需設置一次,并對多個組件重用,每次添加組件時只有少數的項需要修改.
          下面是一個具有簡單約束的GridBagLayout示例
    public class GridBagLayoutExample2 extends JPanel {

    public GridBagLayoutExample2() {

    this.setLayout(new GridBagLayout());
    this.setOpaque(true);
    GridBagConstraints c = new GridBagConstraints();
    JButton b = new JButton ("One");
    c.gridx = 0 ;
    c.gridy = 0;
    c.gridwidth = 2;
    c.gridheight = 1;
    this.add(b,c);//button 1 added
    c.gridy++;
    b= new JButton("Two");
    this.add(b,c);

    c.gridx = 2;
    c.gridy = 0;
    c.gridwidth = 2;
    c.gridheight = 2;
    b = new JButton("Three");
    this.add(b,c);

    c.gridx = 0 ;
    c.gridy = 2;
    c.gridwidth = 4;
    c.gridheight =1 ;
    this.add(new JTextField(35),c);
    }

    public static void main(String[] args) {
    JFrame f = new JFrame("GridBagLayout 2");
    JPanel p = new GridBagLayoutExample2();
    f.getContentPane().add(p);
    f.pack();
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.setVisible(true);

    }

    }

     attachments/month_200612/4282592102.jpg

    圖表 1

          上述示例首先生成了約束對象c , 并設置了它的屬性gridx , gridy , gridwidth, girdheight四個屬性,下面簡要介紹這四個屬性的作用
    gridx, gridy 這個屬性是用來描述組件在布局時應處于那個網格位置,即描述網格開始的位置
    gridwidth,gridheigh這兩個屬性用來描述組件在布局中的所占的網格的個數,gridwidth描述了該組件在橫向上所占網格的個 數,gridheight描述了該組件在縱向上所占網格的個數.
          你也可以通過GridBagConstraints的RELETIVE,和REMAINDER來進行指定,它的用法是:
          當把gridx值設置為GridBagConstriants.RELETIVE時,在一個組件添加時,將被放置在前一個組件的右側.同理,對gridy 值設置為GridBagConstraints.RELETIVE時,在添加組件時,將被放置在前一個組件的下方,(這是一種根據前一個組件而決定當前組 件的相對放置方式)
          對gridweight和gridheight也可以應用GridBagConstraints的REMAINDER方式,創(chuàng)建的組件會從創(chuàng)建的起點位置 開始一直延伸到容器所能允許的限度為止.該功能使得你可以創(chuàng)建跨越某些行或列的組件,從而改變相應方向上組件的數目,即使其后在布局的其他地方添加額外的 組件也是如此.
          你可以注意到圖表1的buttonOne和buttonTwo上下緊靠,你可以通過設置GridBagConstraints成員Insets來調整它周 圍的空間大小,
    new Insets(int top , int left , int bottom, int right)
          c.insets = new Insets(4,4,4,4);

     attachments/month_200612/3633838330.jpg

    圖表2


          接下去要解決的一個問題是容器縮放時的行為.對于文本欄這個問題是最明顯的,無論容器如何變形,它都保持同樣的大小.文本區(qū)域應該總是跨越在容器的底部, 但你肯定不希望在縱向縮放時,文本欄也縱向增長.
          weightx和weighty成員就是用來控制在容器變形時,單元格本身如何縮放.這兩個屬性都是浮點數值,描述了每個單元格在拉伸時橫向或縱向等到的 分配比例.如對上例中的weightx設置
          button one 0.4
          button two 0.4
          button three 0.6
          text area 1.0
        則在拉伸過程中,假設拉伸了10個象素,則button one橫向得到10*0.4 = 4個象素
        button three得到了剩余的6個象素.在拉伸過程中按鈕one和按鈕three以0.4:0.6的方式放大
        為了放置縱向拉伸時,文本框的縱向擴展,你可以把weighty設置為0

    attachments/month_200612/2303926635.jpg

    圖表3

    attachments/month_200612/3307202865.jpg

    圖表4

        你可能已經注意到,盡管我們已經將文本框的weight設置為1.0,但它并沒有占據額外的可用的橫向空間,即并沒有在橫向拉伸時始終占據整個底部行.
    之 所以出現這個問題,是因為單元格和組件之間的區(qū)別還沒有弄清楚,weightx和weighty值控制的是容器增長時單元格擴展的程度,但它們對各個單元 格中的組件并沒有直接的效應.實際上,當窗口擴展時容器的所有單元格都增長了,包括文本框所在的一橫行單元格.但文本欄根本沒有增長.這是因為在所分配的 單元格內部,組件的增長是由GridBagConstraints對象的fill成員控制的,它可取下列值
    GridBagConstraints.NONE 不增長
    GridBagConstraints.HORIZONTAL 只橫向增長
    GridBagConstraints.VERTICAL 只縱向增長
    GridBagConstraints.BOTH   雙向增長
    當你創(chuàng)建一個GridBagConstraints對象時,其fill值設置為NONE,因此在單元格增長時,單元格內部組件不會增長.

    attachments/month_200612/5502697404.jpg

    圖表5

          ipadx和ipady兩個屬性:
    在GridBagLayout 對容器進行布局時,它把每個組件的最小尺寸作為如何分配空間的一個約束條件來考慮;如果一個按鈕的最小尺寸是30象素寬,20象素高,而相關聯的約束對象 中,ipadx為4,ipady為2,那么按鈕的最小尺寸將會成為橫向38象素,縱向24象素.
          anchor屬性:
    當組件在橫向或縱向上小于所分配到的單元格面積時,該字段會起作用.在這些情況下,anchor將決定組件如何在可用的空間中對齊.默認情況下,組件固定 在單元格的中心,周圍均勻分布多余空間.你也可以指定其他對齊方式:
    GridBagConstraints.NORTH
    GridBagConstraints.SOUTH
    GridBagConstraints.NORTHWEST
    GridBagConstraints.SOUTHWEST
    GridBagConstraints.SOUTHEAST
    GridBagConstraints.NORTHEAST
    GridBagConstraints.EAST
    GridBagConstraints.WEST

    attachments/month_200612/8708736807.jpg

    圖表6

    posted on 2010-05-01 22:26 輕帆向南 閱讀(387) 評論(0)  編輯  收藏 所屬分類: java

    導航

    留言簿

    隨筆分類(13)

    隨筆檔案(13)

    文章分類

    最新評論

    主站蜘蛛池模板: 精品一区二区三区免费毛片| 亚洲看片无码在线视频| 亚洲第一视频在线观看免费| 日本免费一区二区三区最新| 亚洲性色AV日韩在线观看| 国产福利在线观看免费第一福利| 精品久久久久久亚洲精品| 色影音免费色资源| 亚洲最大的黄色网| 日韩视频在线免费| 成人午夜影视全部免费看| 老司机亚洲精品影院无码 | 亚洲短视频男人的影院| 久久国产精品免费网站| 亚洲福利一区二区三区| 在线观看av永久免费| 亚洲成a人片在线观看天堂无码| 两个人看的www高清免费视频 | 亚洲第一区视频在线观看| 亚洲最大免费视频网| 亚洲中文字幕日本无线码| 国产一级大片免费看| 国产乱子伦精品免费视频| 亚洲AV成人片色在线观看| 无人在线直播免费观看| 亚洲a∨国产av综合av下载| 亚洲精品456播放| 亚洲精华国产精华精华液好用 | 久久91亚洲人成电影网站| 久久精品成人免费看| 亚洲一级高清在线中文字幕| 国产又黄又爽又刺激的免费网址 | 免费的一级黄色片| 精选影视免费在线 | 91精品国产亚洲爽啪在线观看| 少妇高潮太爽了在线观看免费| 色多多免费视频观看区一区| 亚洲电影中文字幕| 国产精品jizz在线观看免费| a毛片免费全部播放完整成| 亚洲制服在线观看|