布局管理器
一、JFrame的简单运用:
package com.test1; import java.awt.*; import javax.swing.*; public class Demo1_1 extends JFrame{ //定义按钮组件 JButton jb1=null; public static void main(String[] args) { Demo1_1 dm=new Demo1_1(); } //构造函数 public Demo1_1() { //初始化按钮组件 jb1=new JButton("按钮1"); //添加组件 this.add(jb1); //设置窗口标题 this.settitle("hello world"); //设置窗口大小,窗口大小的单位是像素 this.setSize(200, 200); //设置窗口位置,窗口位置定义的是窗口最左上角的点的坐标 this.setLocation(100, 100); //设置当关闭窗口时保证JVM也退出 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //显示窗口 this.setVisible(true); } }
二、布局管理器--介绍
1、概念:组件在容器(比如JFrame)中的位置和大小是由布局管理器来决定的。所有的容器都会使用一个布局管理器,通过它来自动进行组件的布局管理。
2、种类:java共提供了五种布局管理器:流式布局管理器(Flowlayout)、边界布局管理器(BorderLayout)、网格布局管理器(gridlayout)、卡片布局管理器(CardLayout)、网格包布局管理器(GridBagLayout)。其中前三种是最常见的布局管理器。
介绍:
(一)、边界布局管理器(BorderLayout):将容器简单的划分为东南西北中五个区域,
中间区域最大,JFrame默认此布局。
案例代码:
/* * BorderLayout演示 * 1、继承JFrame * 2、定义你需要的组件 * 3、创建组件(构造函数里初始化创建) * 4、添加组件(引用边界布局管理器来添加组件的过程中布局) * 5、对窗体的设置 * 6、显示窗体 */ package com.test1; import java.awt.*; import javax.swing.*; public class Demo1_2 extends JFrame{ //定义五个组件 JButton jb1,jb2,jb3,jb4,jb5; public static void main(String[] args) { // TODO Auto-generated method stub Demo1_2 dm=new Demo1_2(); }
//构造函数 public Demo1_2() { //创建组件 jb1=new JButton("中部"); jb2=new JButton("北部"); jb3=new JButton("东部"); jb4=new JButton("南部"); jb5=new JButton("西部"); //添加组件 this.add(jb1, BorderLayout.CENTER); this.add(jb2, BorderLayout.NORTH); this.add(jb3, BorderLayout.EAST); this.add(jb4, BorderLayout.SOUTH); this.add(jb5, BorderLayout.WEST); //设置窗体属性 //窗体标题 this.setTitle("边界布局案例"); //设置窗体大小 this.setSize(300, 300); //设置窗体位置 this.setLocation(800, 400); //设置关闭窗体同时退出JVM this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //显示窗体 this.setVisible(true); } }
边界布局管理器(BorderLayout)--注意事项:
1、不是五个部分都必须添加
2、中部组件会自动的调节大小(中间部分最强势)
3、JFrame,JDialog默认布局管理器就是BorderLayout
(二)、流式布局管理器(FlowLayout): 按照组件添加的次序将定义的组件从左至右放置到容器中,当达到容器的边界时,组件将放置在下一行中。FloeLayout可以选择以左对齐、居中对齐、以右对齐的方式排列组件。
案例代码如下:
/* * 流式布局案例 */ package com.test1; import java.awt.*; import javax.swing.*; public class Demo1_3 extends JFrame{ JButton jb1,jb2,jb3,jb4,jb5,jb6; public static void main(String[] args) { // TODO Auto-generated method stub Demo1_3 dm=new Demo1_3(); } //构造 public Demo1_3() { //创建组件 jb1=new JButton("关羽"); jb2=new JButton("张飞"); jb3=new JButton("赵云"); jb4=new JButton("马超"); jb5=new JButton("黄忠"); jb6=new JButton("魏延"); //添加组件 this.add(jb1); this.add(jb2); this.add(jb3); this.add(jb4); this.add(jb5); this.add(jb6); //设置布局管理器,流式布局默认是中间对齐, //我们要在new FlowLayout(FlowLayout.LEFT)设置,此时设置的是左对齐 this.setLayout(new FlowLayout(FlowLayout.LEFT)); //设置窗体属性 //窗体标题 this.setTitle("边界布局案例"); //设置窗体大小 this.setSize(300, 300); //设置窗体位置 this.setLocation(800, 400); //设置关闭窗体同时退出JVM this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //显示窗体 this.setVisible(true); } }
流式布局(FlowLayout)--注意事项
1、不限制他所管理的组件的大小,允许他们有最佳大小
2、当容器被缩放时,组件的位置可能变化,但是组件的大小不变
3、默认组件是居中对齐,可以通过FlowLayout(intalign)函数来指定对齐方式
(三)、网格布局GridLayout:它将容器分割成多行多列,组件被填充到每个网格中,添加到容器中的组件首先放置在左上角的网格中,然后从左到右放置其他的组件,当占满该行的所有网格后,接着继续在下一行从左至右放置组件。
案例代码如下:
/* * 网格布局演示 */ package com.test1; import java.awt.*; import javax.swing.*; public class Demo1_4 extends JFrame{ //定义组件 int size=9; JButton jbs[]=new JButton[size]; public static void main(String[] args) { // TODO Auto-generated method stub Demo1_4 dm=new Demo1_4(); } //构造 public Demo1_4() { //创建组件 for(int i=0;i<size;i++) { jbs[i]=new JButton(String.valueOf(i)); } //设置网格布局管理器,设置3行3列,每个组件间隔水平方向10,垂直方向10 个像素 this.setLayout(new GridLayout(3,3,10,10)); //添加组件 for(int i=0;i<size;i++) { this.add(jbs[i]); } //设置窗体属性 this.setTitle("网格布局案例"); this.setSize(300,300); this.setLocation(700,400); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } }
网格布局GridLayout --注意事项
1、组件的相对位置不随容器的缩放变化,但是组件的大小会变,也就是讲我们缩放窗口时组件之间的间隙是不会随之变化的,但是组件大小会等比例的变化
2、所有组件的大小是相同的
3、可以通过GridLayout(int rows,int cols,int hgap,int vgap)来指定网格的行/列,水平间隙/垂直间隙。
相关阅读
接口的概念 在Java中接口是一个全部由抽象方法组成的集合,接口需要用interface定义,里面只能有抽象的方法和常量。接口体现的是
工作流基本概念: 什么是工作流?工作流:两个或两个以上的人,为了共同的目标,连续的以串行或并行的方式去完成某一业务。业务:工作流所
JAVA深入研究——Method的Invoke方法。 在写代码的时候,发现从父类class通过getDeclaredMethod获取的Method可以调用子类的对象,而
https://www.cnblogs.com/andy-do/archive/2013/03/28/2986534.html,学习参考
今天在群里面看到一个很有意思的面试题:“编写两个线程,一个线程打印1~25,另一个线程打印字母A~Z,打印顺序为12A34B56C……5152Z,要求