java_网格组布局

网格组布局

   网格组布局是所有布局管理器之母,可以将网格布局看成没有任何限制的网格布局.在网格布局中,行和列的尺寸可以改变.可以将相邻的单元合并以适应较大的组件..

 

 

看图中包含下面的组件.

1两个用于字体外观和大小的组合框

2两个组合框的标签

3两个用于选择斜体和粗体的复选框

4一个显示文本的文本区

现在将容器分解为网格单元,,每个复选框横跨两列,文本区跨4行.

要想使用网格组管理器进行布局,必须经过下列过程:

1建立一个GridBagLayout的对象.不需要指定网格的列数和行数.

2将gridbaglayout对象设置成组件的布局管理器

3为每个组件建立一个gridbagConstraints对象.设置Gridbagconstraints对象的域以便指出组件在网格组中的布局方案.

4最后.通过下面调用添加组件的约束

Add(component,constraints);

 

代码如下(包含两个类,其中一个GBC类对父类gridbagConstraints 的重载)

 

package gridbag;

import javax.swing.*;

 

import java.awt.*;

import java.awt.event.*;

import java.beans.EventHandler;

public class FontFrame extends JFrame {

      public static final int TEXT_ROWS=10;

      public static final int TEXT_COLUMNS=20;

      private JComboBox face;

      private JComboBox size;

      private JCheckBox bold;

      private JCheckBox italic;

      private JTextArea sample;

      public static void main(String[] args) {

     new FontFrame();

   }

    public FontFrame()

    {

      GridBagLayout layout=new GridBagLayout();

      setLayout(layout);

      ActionListenerlistener=EventHandler.create(ActionListener.class, this,"updateSample");

      

      JLabel facelabel=new JLabel(":");

      face=new JComboBox();

      face.addItem("Serif");

      face.addItem("SansSerif");

      face.addActionListener(listener);

      JLabel sizeLabel=new JLabel("尺寸:");

      size=new JComboBox();

      size.addItem(8);

      size.addItem(10);

      size.addItem(12);

      size.addItem(15);

      size.addItem(17);

      size.addActionListener(listener);

      bold=new JCheckBox("粗体");

      bold.addActionListener(listener);

      italic=new JCheckBox("斜体");

      italic.addActionListener(listener);

      sample=new JTextArea(TEXT_ROWS,TEXT_COLUMNS);

      sample.setText("the quick brown fox jumps over the lazy dog");

      sample.setEnabled(false);

      sample.setLineWrap(true);

      sample.setBorder(BorderFactory.createEtchedBorder());

      add(facelabel,newGBC(0,0).setAnchor(GBC.EAST));

      add(face,newGBC(1,0).setFill(GBC.HORIZONTAL).setWeight(100,0).setInsets(1));

      add(sizeLabel,newGBC(0,1).setAnchor(GBC.EAST));

      add(size,newGBC(1,1).setFill(GBC.HORIZONTAL).setWeight(100, 0).setInsets(1));

      add(bold,newGBC(0,2,2,1).setAnchor(GBC.CENTER).setWeight(100, 100));

      add(italic,newGBC(0,3,2,1).setAnchor(GBC.CENTER).setWeight(100,100));

      add(sample,newGBC(2,0,1,4).setFill(GBC.BOTH).setWeight(100, 100));

      pack();

      this.setVisible(true);

      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      updateSample();

    }

    public void updateSample()

    {

      String fontFace=(String) face.getSelectedItem();

      int fontStyle=(bold.isSelected()?Font.BOLD:0)+

      (italic.isSelected()?Font.ITALIC:0);

//   int fontSize=size.getItemAt(size.getSelectedIndex());

      Font font=newFont(fontFace,fontStyle,10);

      sample.setFont(font);

      sample.repaint();

      

      

    }

    

}

这个类对gridbagcontraints的重载.

 

package gridbag;

import java.awt.*;

public class GBC extends GridBagConstraints{

    public GBC(int gridx,int gridy)

    {

      this.gridx=gridx;

      this.gridy=gridy;

    }

   public GBC(int gridx,int gridy,int gridwidth,int gridheight)

   {

     this.gridx=gridx;

     this.gridy=gridy;

     this.gridwidth=gridwidth;

     this.gridheight=gridheight;

   }

   //如果组件没有填充整个区域,可以通过设置anchor域指定其位置

   public GBC setAnchor(int anchor)

   {

     this.anchor=anchor;

     return this;

   }

   //用于填充的

   public GBC setFill(int fill)

   {

     this.fill=fill;

     return this;

    

   }

   //设置单元格的宽度

   public GBC setWeight(double weightx,double weighty)

   {    

     this.weightx=weightx;

     this.weighty=weighty;

     return this;

   }

   //可以通过设置gridbaglayoutinsets域在组件周围增加附加的空白区域

   public GBC setInsets(int distance)

   {  

     this.insets=new Insets(distance,distance,distance,distance);

     return this;

   }

   public GBC setInsets(int top,int left,int bottom,int right)

   { 

     this.insets=new Insets(top,left,bottom,right);

     return this;

   }

   //设置padding

   public GBC setIpad(int ipadx,int ipady)

   {  

     this.ipadx=ipadx;

     this.ipady=ipady;

     return this;

   }

  

}

 

 

 

附加:

 

构造方法详细信息

GridBagConstraints

public GridBagConstraints()

创建一个 GridBagConstraint 对象,将其所有字段都设置为默认值。


GridBagConstraints

public GridBagConstraints(int gridx,
                          int gridy,
                          int gridwidth,
                          int gridheight,
                          double weightx,
                          double weighty,
                          int anchor,
                          int fill,
                          Insets insets,
                          int ipadx,
                          int ipady)

创建一个 GridBagConstraints 对象,将其所有字段都设置为传入参数。注:因为使用此构造方法会妨碍源代码的可读性,所以此构造方法仅供自动源代码生成工具使用。

参数:

gridx - 初始 gridx 值。

gridy - 初始 gridy 值。

gridwidth - 初始 gridwidth 值。

gridheight - 初始 gridheight值。

weightx - 初始 weightx 值。

weighty - 初始 weighty 值。

anchor - 初始 anchor 值。

fill - 初始 fill 值。

insets - 初始 insets 值。

ipadx - 初始 ipadx 值。

ipady - 初始 ipady 值。

 

 

 

anchor

public int anchor

当组件小于其显示区域时使用此字段。它可以确定在显示区域中放置组件的位置。

可能的值有三种:相对于方向的值、相对于基线的值和绝对值。相对于方向的值是相对于容器的组件方向属性进行解释的,相对于基线值是相对于基线进行解释的,绝对值则不然。绝对值有:CENTERNORTHNORTHEASTEASTSOUTHEASTSOUTHSOUTHWESTWESTNORTHWEST。方向相对值有:PAGE_STARTPAGE_ENDLINE_STARTLINE_ENDFIRST_LINE_STARTFIRST_LINE_ENDLAST_LINE_STARTLAST_LINE_END。相对于基线的值有:BASELINEBASELINE_LEADINGBASELINE_TRAILINGABOVE_BASELINEABOVE_BASELINE_LEADINGABOVE_BASELINE_TRAILINGBELOW_BASELINEBELOW_BASELINE_LEADINGBELOW_BASELINE_TRAILING。默认值为 CENTER

fill

public int fill

当组件的显示区域大于它所请求的显示区域的大小时使用此字段。它可以确定是否调整组件大小,以及在需要的时候如何进行调整。

以下值适用于 fill

·        NONE:不调整组件大小。

·        HORIZONTAL:加宽组件,使它在水平方向上填满其显示区域,但是不改变高度。

·        VERTICAL:加高组件,使它在垂直方向上填满其显示区域,但是不改变宽度。

·        BOTH:使组件完全填满其显示区域。

默认值为 NONE

insets

public Insets insets

此字段指定组件的外部填充,即组件与其显示区域边缘之间间距的最小量。

默认值为 new Insets(0, 0, 0,0)

ipadx

public int ipadx

此字段指定组件的内部填充,即给组件的最小宽度添加多大的空间。组件的宽度至少为其最小宽度加上ipadx 像素。

默认值为 0

 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值