流式布局
在java中,组件放置在窗体上的方式可能与你使用过的任何GUI系统都不相同。首先,它完全基于代码;没有用来控制组件布置的“资源”。第二,组件放置在窗体上的方式不是通过绝对坐标控制,而是由“布局管理器”根据组件加入的顺序决定其位置。使用不同的布局管理器,组件的大小、形状和位置将大不相同。此外,布局管理器还可以适应applet或应用程序窗口的大小,所以如果窗口的尺寸改变了,组件的大小、形状和位置也能够做相应的改变。
JApplet、JFrame、JDialog、JPanel等都可以包含和显示组件。Container中有一个称为setLayout()的方法,可以通过这个方法来选择不同的布局管理器。在本节中,我们将通过在窗体上放置一些按钮来研究不同的布局管理器(这样最简单)。这些示例不会捕获任何按钮事件,因为它们仅仅是为了演示按钮是如何布局的。
一、BorderLayout
除非你设置为其他的布局模式,否则JFrame将使用BorderLayout作为默认的布局模式。如果不加入其他指令,它将接受你调用add()方法而加入的组件,把它放置在中央,然后把组件向各个方向拉伸,直到与边框对齐。
BorderLayout具有四个边框区域和一个中央区域的概念。当向由BorderLayout管理的面板加入组件的时候,可以使用重载的add()方法,它的第一个参数接受一个常量值。这个值可以为一下任何一个:
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class TestFlowLayout {
public static void main(String[] args) {
JFrame jf = new JFrame("流布局DEMO"); //建立一个窗口
FlowLayout fl = new FlowLayout(); //使用流布局
jf.setLayout(fl);//修改布局管理
JButton jb1 = new JButton("按钮1"); //创建一个按钮
jf.add(jb1); //把按钮jb1放入窗口
JButton jb2 = new JButton("按钮2");//创建一个按钮
jf.add(jb2);//把按钮jb2放入窗口
jf.setSize(600, 300); //设置窗口的大小
jf.setLocation(300,200);//设置窗口的初始位置
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口
jf.setVisible(true); //显示窗口
}
}
public class Test {
public static void main(String[] args) {
// 创建窗口
JFrame jFrame = new JFrame();
// 设置窗口名称
jFrame.setTitle("hello");
// 创建边界布局管理器
BorderLayout layout = new BorderLayout();
// 关闭窗口结束程序
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 创建内容面板
Container contentpage = jFrame.getContentPane();
// 设置内容面板布局方式为流布局
contentpage.setLayout(layout);
// 创建按钮
JButton button1 = new JButton("1");
JButton button2 = new JButton("2");
JButton button3 = new JButton("3");
JButton button4 = new JButton("4");
JButton button5 = new JButton("5");
// 设置按钮背景颜色
button1.setBackground(Color.red);
button2.setBackground(Color.blue);
button3.setBackground(Color.pink);
button4.setBackground(Color.orange);
button5.setBackground(Color.yellow);
// 将按钮添加到内容面板中
// 将按钮放置到北部
contentpage.add(button1,BorderLayout.NORTH);
// 将按钮放置到南部
contentpage.add(button2,BorderLayout.SOUTH);
// 将按钮放置到西部
contentpage.add(button3,BorderLayout.WEST);
// 将按钮放置到东部
contentpage.add(button4,BorderLayout.EAST);
// 将按钮放置到中心
contentpage.add(button5,BorderLayout.CENTER);
// 设置窗口大小
jFrame.setSize(500, 300);
// 设置窗口可见
jFrame.setVisible(true);
}
}
import java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class MyCompute {
public static void main(String[] args) {
JFrame jf = new JFrame("计算器"); //创建一个窗口
JTextField jtf = new JTextField("0",20); //初始的文本为0,长度是20
jf.add(jtf,BorderLayout.NORTH);
String[] lab = {"CE","C","+/-","BackS","7","8","9","+","4","5","6",
"-","1","2","3","*","0",".","=","/"}; //按键上的文本
JPanel jp = new JPanel(); //创建面板
GridLayout gl = new GridLayout(5,4); //创建网格布局
jp.setLayout(gl); //将面板的布局方式改为网格布局
for(int i=0;i<lab.length;i++){
JButton jb = new JButton(lab[i]); //创建按钮
jp.add(jb);//将创建出来的按钮都放入面板
}
jf.add(jp);//将面板放入窗口
jf.pack(); //自动调节大小
jf.setResizable(false);//不能改变窗口的大小
jf.setLocation(300,200); // 设置初始的位置
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭
jf.setVisible(true); //解决了初始不可见的问题
}
}