/liujun13579/article/details/7772215 java.awt包中大约有FlowLayout 流式布局BorderLayout 边框式布局GridLayout 网格布局CardLayout 卡片布局GridBagLayout 复杂的网格布局javax.swing包中大约有如下布局BoxLayout 盒式布局OverlayLayout 重叠布局ScrollPaneLayout 类JScrollPane使用的布局管理器ViewportLayout 类JViewport使用的布局管理器详解:实例:对齐方式// FlowLayoutDemo.javaimportjavax.swing.*;importjava.awt.*;public classFlowLayoutDemo extends JFrame { public FlowLayoutDemo() {//设置窗体为流式布局,无参数默认为居中对齐setLayout(new FlowLayout());//设置窗体中显示的字体样式setFont(new Font("Helvetica",Font.PLAIN, 14));//将按钮添加到窗体中getContentPane().add(newJButton("Button 1"));getContentPane().add(new JButton("Button 2"));getContentPane().add(new JButton("Button3"));getContentPane().add(newJButton("Button 4"));}public static void main(String args[]) {FlowLayoutDemo window = newFlowLayoutDemo();window.setTitle("流式布局");//该代码依据放置的组件设定窗口的大小使之正好能容纳你放置的所有组件window.pack();window.setVisible(true);window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);window.setLocationRelativeTo(null); //让窗体居中显示}}修改程序代码体会界面布局效果:setLayout(newFlowLayout());将上面源程序中的代码更改如下,然后做出如下更改:setLayout(newFlowLayout(0)); //组件左对齐setLayout(newFlowLayout(FlowLayout.RIGHT,10,15)); //组件右对齐,组件间水平间距为10像素,垂直间距为15像素// BorderLayoutDemo.javaimport javax.swing.*;import java.awt.*;public class BorderLayoutDemo extends JFrame {public BorderLayoutDemo(){ //构造函数,初始化对象值//设置为边界布局,组件间横向、纵向间距均为5像素setLayout(new BorderLayout(5,5));setFont(new Font("Helvetica", Font.PLAIN, 14));getContentPane().add("North", new JButton("North")); //将按钮添加到窗口中getContentPane().add("South", new JButton("South"));getContentPane().add("East", new JButton("East"));getContentPane().add("West", new JButton("West"));getContentPane().add("Center",new JButton("Center"));}public static void main(String args[]) {BorderLayoutDemo f = new BorderLayoutDemo();f.setTitle("边界布局");f.pack();f.setVisible(true);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setLocationRelativeTo(null); //让窗体居中显示}}程序执行结果如下所示:实例二:在中间位置中添加9个按钮。
// BorderLayoutDemo1.javaimport javax.swing.*;import java.awt.*;public class BorderLayoutDemo1 extends JFrame {JPanel p=new JPanel();public BorderLayoutDemo(){setLayout(new BorderLayout(5,5));setFont(new Font("Helvetica", Font.PLAIN, 14));getContentPane().add("North", new JButton("North"));getContentPane().add("South", new JButton("South"));getContentPane().add("East", new JButton("East"));getContentPane().add("West", new JButton("West"));//设置面板为流式布局居中显示,组件横、纵间距为5个像素 p.setLayout(new FlowLayout(1,5,5));//使用循环添加按钮,注意每次添加的按钮对象名称都是b //但按钮每次均是用new新生成的,所有代表不同的按钮对象。
for(int i=1;i<10;i++){//String.valueOf(i),将数字转换为字符串JButton b=new JButton(String.valueOf(i));p.add(b); //将按钮添加到面板中}getContentPane().add("Center",p); //将面板添加到中间位置}public static void main(String args[]) {BorderLayoutDemo1 f = new BorderLayoutDemo1();f.setTitle("边界布局");f.pack(); //让窗体自适应组建大小f.setVisible(true);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setLocationRelativeTo(null); //让窗体居中显示}}实例一://GridLayoutDemo.javaimport javax.swing.*;import java.awt.*;public class GridLayoutDemo extends JFrame {public GridLayoutDemo() {setLayout(new GridLayout(0,2)); //设置为网格布局,未指定行数setFont(new Font("Helvetica", Font.PLAIN, 14));getContentPane().add(new JButton("Button 1"));getContentPane().add(new JButton("Button 2"));getContentPane().add(new JButton("Button 3"));getContentPane().add(new JButton("Button 4"));getContentPane().add(new JButton("Button 5"));}public static void main(String args[]) {GridLayoutDemo f = new GridLayoutDemo();f.setTitle("GridWindow Application");f.pack();f.setVisible(true);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setLocationRelativeTo(null); //让窗体居中显示}}实例二:布局一个简单的计算器思路:对窗体应用边界布局,在NORTH上放置一个文本框,在CENTER 上放置一个面板,面板上放置计算器的相应按钮//GridFrame.Javaimport java.awt.*;import javax.swing.*;class GridFrame extends JFrame{//定义面板,并设置为网格布局,4行4列,组件水平、垂直间距均为3JPanel p=new JPanel(new GridLayout(4,4,3,3));JTextArea t=new JTextArea(); //定义文本框//定义字符串数组,为按钮的显示文本赋值//注意字符元素的顺序与循环添加按钮保持一致Stringstr[]={"7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"};public GridFrame(String s){super(s); //为窗体名称赋值setLayout(new BorderLayout()); //定义窗体布局为边界布局JButton btn[]; //声明按钮数组btn=new JButton[str.length]; //创建按钮数组//循环定义按钮,并添加到面板中for(int i=0;i<str.length;i++){btn[i]=new JButton(str[i]);p.add(btn[i]);}//将文本框放置在窗体NORTH位置getContentPane().add(t,BorderLayout.NORTH);//将面板放置在窗体CENTER位置getContentPane().add(p,BorderLayout.CENTER);setVisible(true);setSize(250,200);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLocationRelativeTo(null); //让窗体居中显示 }public static void main(String[] args){GridFrame gl=new GridFrame("网格布局计算机!");}}程序执行结果如下图:实例:使用空布局精确定位组件的位置// NullLayoutDemo.javaimport java.awt.*;import javax.swing.*;public class NullLayoutDemo{ JFrame fr;JButton a,b; NullLayoutDemo() {fr = new JFrame();fr.setBounds(100,100,250,150);//设置窗体为空布局fr.setLayout(null);a=new JButton("按钮a");b=new JButton("按钮b");fr.getContentPane().add(a);//设置按钮a的精确位置a.setBounds(30,30,80,25);fr.getContentPane().add(b);b.setBounds(150,40,80,25);fr.setTitle("NullLayoutDemo");fr.setVisible(true);fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);fr.setLocationRelativeTo(null); //让窗体居中显示}public static void main(String args[]){new NullLayoutDemo();}}程序运行结果如下:2、使用CardLayout类提供的方法可以切换显示该空间中的组件方法一步骤:(1)定义使用卡片布局的容器例如:Panel cardPanel=new Panel();(2)定义卡片对象:CardLayout 布局对象名称=new CardLayout();例如:CardLayout card=new CardLayout();(3)设置使用卡片布局的容器为卡片布局:格式:容器名称.setLayout(布局对象名称);例如:cardPanel.setLayout(card);(4)设置容器中显示的组件例如:for (int i = 0; i < 5; i++) {cardPanel.add(newJButton("按钮"+i));}(5)定义响应事件代码,让容器显示相应的组件格式:n 布局对象名称.next(容器名称) 显示容器中当前组件之后的一个组件,若当前组件为最后添加的组件,则显示第一个组件,即卡片组件显示是循环的。