网格袋布局类似于Win8的Metro布局,用于将组件按大小比例放在不同位置的网格内,各组件的实际大小会随着窗口的改变而改变,但相对位置不变,能够很好的适应屏幕。

通过阅读《21天学通Java》这本书,发现了一个布局组件的很好的例子,遂摘录下来,供分享和复习。

在这本书中,举了一个邮件窗口的例子,需要的布局规划如下:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/4B/69/wKioL1QrdLvi95RwAADcnWIATck294.jpg" title="1.png" alt="wKioL1QrdLvi95RwAADcnWIATck294.jpg" />

其中,二维坐标表示网格相对位置,以(0,0)为网格的起点,横x竖y,后面的width指的是横向跨越的单元格数。注意,网格是由一个或多个单元格组成的整体。

常用属性有;

gridx gridy: 单元格位置,如果跨越多个格则为左上角位置

gridwidth gridheight: 组件水平、垂直方向跨越的格数

weightx weighty: 组件相对于同一行、列内其他组件的大小(相对权重)

fill: 水平或者垂直方向拉伸,可选属性如下(实质int)

GridBagConstraints内的常成员:NONE HORIZONTAL VERITAL BOTH

anchor: 对齐方式,可选属性如下(实质int)

GridBagConstraints内的常成员:WEST EAST 分别为向左、右单元格对齐

为了能够简化代码,可以制作一个布局方法,每次只需要调用方法遍完成一个组件的布局。示例代码如下:

import java.awt.*;
import javax.swing.*; public class learn3 extends JFrame{
    GridBagLayout gridbag = new GridBagLayout();
    public learn3(){
        super("Message");
        setSize(380,120);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLookAndFeel();
        setLayout(gridbag);
        JLabel toLabel = new JLabel("To:");
        JTextField to = new JTextField();
        JLabel subjectLabel = new JLabel("subject:");
        JTextField subject = new JTextField();
        JLabel ccLabel = new JLabel("CC:");
        JTextField cc = new JTextField();
        JLabel bccLabel = new JLabel("Bcc");
        JTextField bcc = new JTextField();
        addComponent(toLabel,0,0,1,1,10,100,GridBagConstraints.NONE,
        GridBagConstraints.EAST);
        addComponent(to,1,0,9,1,90,100,GridBagConstraints.HORIZONTAL,
        GridBagConstraints.WEST);
        addComponent(subjectLabel,0,1,1,1,10,100,GridBagConstraints.NONE,
        GridBagConstraints.EAST);
        addComponent(subject,1,1,9,1,90,100,GridBagConstraints.HORIZONTAL,
        GridBagConstraints.WEST);
        addComponent(ccLabel,0,2,1,1,10,100,GridBagConstraints.NONE,
        GridBagConstraints.EAST);
        addComponent(cc,1,2,4,1,40,100,GridBagConstraints.HORIZONTAL,
        GridBagConstraints.WEST);
        addComponent(bccLabel,5,2,1,1,10,100,GridBagConstraints.NONE,
        GridBagConstraints.EAST);
        addComponent(bcc,6,2,4,1,40,100,GridBagConstraints.HORIZONTAL,
        GridBagConstraints.WEST);
        setVisible(true);
    }
    
   private void addComponent(Component comp,int gridx,int gridy
    ,int gridwidth, int gridheight, int weightx, int weighty, 
    int fill, int anchor)
   {
       GridBagConstraints constraint = new GridBagConstraints();
       constraint.gridx = gridx;
       constraint.gridy = gridy;
       constraint.gridwidth = gridwidth;
       constraint.gridheight = gridheight;
       constraint.weightx = weightx;
       constraint.weighty = weighty;
       constraint.fill = fill;
       constraint.anchor = anchor;
       gridbag.setConstraints(comp, constraint);
       add(comp);
   }
    
    private void setLookAndFeel(){
        try{
            UIManager.setLookAndFeel(
            "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"
            );
            SwingUtilities.updateComponentTreeUI(this);
        }
        catch(Exception exc){
            //ignore error
        }
        
    }
    
public static void main(String[] args) {
    learn3 learn = new learn3();
}
}

Java学习笔记(一)网格袋布局的更多相关文章

  1. Java学习笔记--Swing用户界面组件

    很多与AWT类似. 事件处理参考:Java学习笔记--AWT事件处理 1.设计模式: 模型:存储内容视图:显示内容控制器:处理用户输入· 2. 文本输入常用组件 2.1 文本域: JLabel lab ...

  2. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  3. Java学习笔记之---API的应用

    Java学习笔记之---API的应用 (一)Object类 java.lang.Object 类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个 ...

  4. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  5. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  6. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  7. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  8. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  9. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  10. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

随机推荐

  1. 手势监听GestureDetector 案例

    以下只做长按和甩出(用户按下朝某一方向甩动手指)案例 OnGestureListener可以查看到更多的手势事件 案例 package com.qf.mobliesafe.activity; impo ...

  2. Bootstrap3 排版-缩略语

    当鼠标悬停在缩写和缩写词上时就会显示完整内容,Bootstrap 实现了对 HTML 的 <abbr> 元素的增强样式.缩略语元素带有 title 属性,外观表现为带有较浅的虚线框,鼠标移 ...

  3. 大规模WebGL应用引发浏览器崩溃的几种情况及解决办法

    一般的Web应用基本上不会导致浏览器崩溃,写Javascript代码也不需要管理内存资源,基本也不需要考虑内存"泄露"的问题.随着H5的崛起,越来越多的原本在桌面端的软件也改头换面 ...

  4. Sqoop-1.4.6 Merge源码分析与改造使其支持多个merge-key

    Sqoop中提供了一个用于合并数据集的工具sqoop-merge.官方文档中的描述可以参考我的另一篇博客Sqoop-1.4.5用户手册. Merge的基本原理是,需要指定新数据集和老数据集的路径,根据 ...

  5. 向VS中添加个PATH怎么样?

    属性中,有个调试的目录,向"环境"中添加: PATH="your path";$(PATH) 可以调试用一下.

  6. [django]urls.py 中重定向

    Django 1.5 有时候需要对一个链接直接重定向,比如首页啥的重定向到一个内容页等等,在views.py 中可以设定,如果没有参数啥的在urls.py 中设定更加方面 from django.vi ...

  7. Spark发展现状与战线

    前言 现今Spark正是风头正劲时,Spark本是UCBerkeley的AMPLab诞生的项目,后来捐赠给了Apache来管理源码和后续发展.今年从Apache孵化器终于孵化出了1.0版本.其对大数据 ...

  8. java虚拟机 jvm 出入java栈 栈空间内存分配

    java栈空间是一块线程私有的内存空间,java堆和程序数据密切相关,那么java栈就是和线程执行密切相关.线程最基本的执行行为就是函数的调用.每次函数调用其实是通过java栈传递数据的. 数据结构中 ...

  9. 巨星陨落 - Jim Gary

    偶然在微软Research中搜论文时搜到了神牛Jim Gary的paper,看着照片有点眼熟,貌似在买过的哪本书中见过.于是就饶有兴致地看着Jim的生平介绍,结果-  "Dr. Gray j ...

  10. Activity和Window的View的移动的一些思考与体会,腾讯悬浮小火箭的实现策略

    Activity和Window的View的移动的一些思考与体会,腾讯悬浮小火箭的实现策略 事实上写这个也是因为自己实际在项目中用到了才会去研究已经写文章,对于View的移动,其实说实话,已经有很多文章 ...