Java学习笔记(一)网格袋布局
网格袋布局类似于Win8的Metro布局,用于将组件按大小比例放在不同位置的网格内,各组件的实际大小会随着窗口的改变而改变,但相对位置不变,能够很好的适应屏幕。
通过阅读《21天学通Java》这本书,发现了一个布局组件的很好的例子,遂摘录下来,供分享和复习。
在这本书中,举了一个邮件窗口的例子,需要的布局规划如下:
其中,二维坐标表示网格相对位置,以(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学习笔记(一)网格袋布局的更多相关文章
- Java学习笔记--Swing用户界面组件
很多与AWT类似. 事件处理参考:Java学习笔记--AWT事件处理 1.设计模式: 模型:存储内容视图:显示内容控制器:处理用户输入· 2. 文本输入常用组件 2.1 文本域: JLabel lab ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- Java学习笔记之---API的应用
Java学习笔记之---API的应用 (一)Object类 java.lang.Object 类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个 ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
- 0035 Java学习笔记-注解
什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...
- Java学习笔记(04)
Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...
- 0032 Java学习笔记-类加载机制-初步
JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...
- 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用
垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
- 0025 Java学习笔记-面向对象-final修饰符、不可变类
final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...
随机推荐
- 安卓高级 WebView的使用到 js交互
我们先来学习 怎么使用再到用js和安卓源生方法交互 WebView简单使用 此部分转载并做了补充 原博客 原因:比较简单不是很想在写,我只要写js交互部分 WebView可以使得网页轻松的内嵌到app ...
- Oracle导出表
方法一:利用PL/SQL Developer工具导出: 菜单栏-->Tools-->Export Tables,如下图,设置相关参数即可: 方法二:可以用cmd的操作命令导出,详情请去百度 ...
- Matplotlib Toolkits:地图绘制工具
Matplotlib Toolkits:地图绘制工具 有没有一种可以直接在详细地图(如谷歌地图)上绘制上百万坐标点的工具???谷歌地图坐标点多了也不能绘制了. Basemap (Not distrib ...
- Redis源码剖析--源码结构解析
请持续关注我的个人博客:https://zcheng.ren 找工作那会儿,看了黄建宏老师的<Redis设计与实现>,对redis的部分实现有了一个简明的认识.在面试过程中,redis确实 ...
- ROS机器人程序设计(原书第2版)补充资料 (肆) 第四章 在ROS下使用传感器和执行器
ROS机器人程序设计(原书第2版)补充资料 (肆) 第四章 在ROS使用传感器和执行器 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. 第四 ...
- ejabberd mod_echo 解析
ejabberd mod_echo 解析(金庆的专栏 2016.8)按开发入门的说明,mod_echo是最简单的模块之一.https://docs.ejabberd.im/developer/当然 m ...
- IntelliJ Idea 设置 Dialyzer
IntelliJ Idea 设置 Dialyzer(金庆的专栏)Erlang开发使用IDEA IDE可以设置外部工具Dialyzer, 然后就可以直接Tools->External Tools ...
- setting.py
""" Django settings for sitea project. For more information on this file, see https:/ ...
- 2.关于QT中数据库操作,简单数据库连接操作,数据库的增删改查,QSqlTableModel和QTableView,事务操作,关于QItemDelegate 代理
Linux下的qt安装,命令时:sudoapt-get install qt-sdk 安装mysql数据库,安装方法参考博客:http://blog.csdn.net/tototuzuoquan ...
- Android中PropertyAnimation属性动画详解(一)
在之前的文章中已经讲了帧动画frame-by-frame animation和补间动画tweened animation,其实这两种动画原理好简单,都是按照预先固定的动画模式来播放的,帧动画将一张张单 ...