本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020

   在java 中,组件放置在窗口上的方式可能与其它的GUI系统都不同样。首先,它全然基于代码。没实用来控制组件布置的“资源”。第二。组件旋转在窗口上的方式不是通过绝对坐标控制。而是由“布局管理器”依据组件增加的顺序决定位置。

使用不同的布局管理器。组件的大小,形状和位置将大不同样,此外,布局管理器还可以适应applet或应用程序窗口的大小,所以假设窗口的尺寸改变了。组件的大小。形状和位置也可以做出对应的改变。

   JApplet,JFrame, JDialog. JPanel等都能够包括和显示组件。Container中有一个称为setLayout()的方法,能够通过这种方法来选择不同的而已管理器。本节就来演示各个不同的布局管理器的效果。

布局管理器:

1. BorderLayout

   JFrame使用BorderLayout作为默认的布局模式。它将接受add()方法将增加的组件放在中央。然后将组件向各个方向拉伸,直到与边框对齐。

   BorderLayout具有四个边框区域和一个中央区域的概念。当向BorderLayout管理的面板增加组件时。能够使用重载的add()方法。它的第一个參数接受一个常量值,能够是下面不论什么一个:

常量 解释
BorderLayout.NORTH 顶端
BorderLayout.SOUTH 底端
BorderLayout.EAST 右端
BorderLayout.WEST 左端
BorderLayout.CENTER 从中央可始填充。直到与其它组件功边框相遇

  假设没有指定放置的位置,则默认是放置在中央。

以下的代码就直接演示了上述表格的5个位置:

public class SwingTest extends JFrame{
public SwingTest() {
super("Hello Swing");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 200);
setVisible(true); add(BorderLayout.NORTH,new JButton("North"));
add(BorderLayout.SOUTH,new JButton("South"));
add(BorderLayout.EAST,new JButton("EAST"));
add(BorderLayout.WEST,new JButton("WEST"));
add(BorderLayout.CENTER,new JButton("Center"));
}
public static void main(String[] args) throws InterruptedException { SwingUtilities.invokeLater(new Runnable() { @Override
public void run() {
// TODO Auto-generated method stub
new SwingTest();
}
});
}

  效果例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamVzc29uMjAxMjEwMjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

2.FlowLayout

  FlowLayout布局直接将组件从左到右“流动”到窗口上,直到占满上方的空间,然后向下移动一行,继续流动。

在使用FlowLayout布局的情况下,组件将呈现“合适”的大小。如,JButton的大小就是其标签的大小。

  主要代码例如以下:

     //FlowLayout布局 
setLayout(new FlowLayout());
for(int i = 0;i < 20;i++){
add(new JButton("Button "+i));
}

  效果:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamVzc29uMjAxMjEwMjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

 这时,你能够拖动窗口缩放窗口,里面的组件也会随着窗口的变化而变化。

3. GridLayout

  GridLayout同意构建一个旋转组件的表格。在向表格里面加入组件的时候。它们将依照从左到右。从上到小的顺序加入。在构造器中要指定须要的行数和列数。它们将均匀分布在窗口上。

		//GridLayout布局 
setLayout(new GridLayout(7,3));
for(int i = 0;i < 20;i++){
add(new JButton("Button "+i));
}

 效果例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamVzc29uMjAxMjEwMjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

4. GridBagLayout 

  GridLayout提供了强大控制功能,包含精确推断视窗区域怎样布局,以及视窗大小变化时怎样又一次放置组件。

只是,它也是最复杂的布局管理器。因此,能够考虑使用TableLayout来替代。

5.  绝对定位

  也能够设置图形组件的绝对位置:

  1) 使用setLayout(null)方法把窗体的布局管理器设置为空。

  2)    为每一个组件调用setBounds(),为该方法传递以像素坐标为单位的边界矩形的參数。

6. BoxLayout

BoxLayout具有GridBagLayout的很多优点,却不像GridBagLayout那么复杂。

BoxLayout能够在水平方向或者垂直方向控制组件的位置。而且通过所谓的“支架和胶水”的机制来控制组件的间隔。

总结:

  这么多的布局管理器,其实。在某些情况下,手工编写GUI窗口就不太合适了,这样做太复杂。也不能充分利用编程时间,所以对于较复杂的窗口还是要用GUIS构造工具,我们仅仅须要理解布局的方式以及怎样处理事件就可以。

java界面编程(3) ------ 控制布局的更多相关文章

  1. Java界面编程-建立一个可以画出图形的简单框架

    引子:总共使用3个.java文件,建立一个简单界面编程的框架. 第1个文件:NotHelloWorldComponent.java //NotHelloWorldComponent.java 1 im ...

  2. Java界面编程—布局管理

    布局是指容器中组件的排列方式 常用的布局管理器 布局管理器名称 所属类包 说明 FlowLayout(流式布局) java.awt 组件按照加入的先后顺序.按照设置的对齐方式从左向右排列,一行排满后到 ...

  3. Java界面编程—事件监听机制

    组件首先要先注册事件处理器,当用户单击组件.移动鼠标或者敲击键盘时都会产生事件(Event),一旦有时间发生,应用程序就会做出对该事件的响应,这些组件就是事件源(Event source). 接受.解 ...

  4. Java可视化编程,基于布局管理器的UI设计

    在<事件驱动模型>讲述了如何将用户与功能实现代码联系到一起.怎么样便于用户理解和符合用户的使用习惯? 本篇还是就此问题作分析,站在用户角度上分析UI各组件倒底该如何设计呈现. 优秀的UI会 ...

  5. Java界面编程—API

    Java 的 GUI 提供的对象都存在 java.awt 和 java.swing 两个包中. awt :Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能 ...

  6. Java 图形编程 二:布局管理器之边界布局

    package second; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.Window ...

  7. Java 图形编程 二:布局管理器之顺序布局

    package second; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.Window ...

  8. Java 界面编程【03】事件监听

    当你把界面都设计好了,总需要添加相应的执行动作给组件,在JAVA中有相应的时间处理机制,叫做“监听器”,给组件添加相应执行动作的过程叫做“注册”,其中的“监听器”是一个接口,里面包含了相应的执行函数, ...

  9. Java界面编程—事件的种类

    Java处理事件相应的类和监听接口大多位于 awt 包中. 在 java.swing.event 包中有专门用于 swing 组件的事件类和监听接口. awt 事件类继承自 AWTEvent,其超类是 ...

随机推荐

  1. linux命令(41):watch命令

    watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行.在Linux下,watch是周期性的执行下个 ...

  2. POJ-1410

    Intersection Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12817   Accepted: 3343 Des ...

  3. 机器学习方法(五):逻辑回归Logistic Regression,Softmax Regression

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 前面介绍过线性回归的基本知识, ...

  4. Insertion Sort List——链表的插入排序

    Sort a linked list using insertion sort. 这道题跟 Sort List 类似,要求在链表上实现一种排序算法,这道题是指定实现插入排序.插入排序是一种O(n^2) ...

  5. DuplicateHandle

    功能:将一个进程内的伪句柄,转化为可以用来进程间通信的实句柄 BOOL DuplicateHandle(  HANDLE hSourceProcessHandle,  HANDLE hSourceHa ...

  6. BZOJ1898: [Zjoi2004]Swamp 沼泽鳄鱼

    1898: [Zjoi2004]Swamp 沼泽鳄鱼 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 478  Solved: 286[Submit][St ...

  7. css自媒体查询

    准备工作1:设置Meta标签 首先我们在使用Media的时候需要先设置下面这段代码,来兼容移动设备的展示效果: <meta name="viewport" content=& ...

  8. Power BI连接至Amazon Redshift

    一直在使用Power BI连接至MongoDB中,但效果一直不是太理想,今天使用另一种方法,将MongoDB中的数据通过Azure Data Factory转入Amazon Redshift中,而在P ...

  9. 笔试之random7生成random10

    /*头条 已知有个Random7()的函数,返回1到7随机自然数,让利用这个Random7()构造Random10()随机1~10. random7构造1~49,限制到1~40,对10求余再+1 */ ...

  10. Luogu P2016 战略游戏(树形DP)

    题解 设\(f[u][0/1/2]\)表示当前节点\(u\),放或不放(\(0/1\))时其子树满足题目要求的最小代价,\(2\)表示\(0/1\)中的最小值. 则有: \[ f[u][0]=\sum ...