Swing布局
1.流式布局(FlowLayout)
流式布局管理器按照水平排列的方式依次排列组件, 排满一行后继续换下一行;排列方向从左到右,或者从右到左;
流式布局主要有三个方面的问题:
- 组件的的排列方向
- 组件的的对齐方式
- 组件是否换行
参数:
- FlowLayout.LEFT 左对齐
- FlowLayout.RIGHT 右对齐
- FlowLayout.CENTER 居中对齐 ( 默认)
- FlowLayout.LEADING 与容器的开始边方向对齐
- FlowLayout.TRAILING 与容器的结束边方向对齐
构造方法:
- FlowLayout( ) 默认居中对齐,水平和垂直间隔是5个单位;
- FlowLayout( int align ) 指定对齐方式,水平和垂直间隔是5个单位;
- FlowLayout( int align , int hgap , int vgap) 指定对齐方式,指定水平和垂直间隔
// 创建窗体对象 JFrame jFrame =new JFrame(); // 设置窗体大小 jFrame.setSize(600, 400); // 设置窗体全屏展示 //jFrame.setExtendedState(JFrame.MAXIMIZED_BOTH); // 设置窗体显示位置 //jFrame.setLocation(100,200); // 设置窗体显示正中间 jFrame.setLocationRelativeTo(null); // 设置窗体标题 jFrame.setTitle("窗体标题"); // 设置窗体不可全屏显示 jFrame.setResizable(false); // 设置窗体关闭后退出程序 jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置此窗口是否应该始终位于其他窗口上方 jFrame.setAlwaysOnTop(true); // 设置窗体图标 jFrame.setIconImage(new ImageIcon(HelloWorld.class.getResource("/images/book.png")).getImage()); // 设置窗体可见 jFrame.setVisible(true); // 创建流式布局对象 FlowLayout flowLayout=new FlowLayout(FlowLayout.LEFT,20,10); // 容器添加布局管理器 JPanel jPanel =new JPanel(flowLayout); JButton btn01 =new JButton("Button01"); JButton btn02 =new JButton("Button02"); JButton btn03 =new JButton("Button03"); JButton btn04 =new JButton("Button04"); JButton btn05 =new JButton("Button05"); jPanel.add(btn01); jPanel.add(btn02); jPanel.add(btn03); jPanel.add(btn04); jPanel.add(btn05); jFrame.add(jPanel);
2.网格布局(GridLayout)
网格布局是按照矩形将容器的组件按照网格进行排列,把容器分成大小相等的网格,一个网格放置一个组件,组件宽高自动撑满网格;
1. 窗体上的所有网格大小是相同的
2. 容器上的所有组件都会被显示出来
3. 行数不变列数变,行数是固定的,列数是根据组件的数量多少来决定生成的;
4. 组件的排列顺序是从左上到右下排列;
构造方法:
- GridLayout( ) ;
- GridLayout( int rows, int cols ) 指定网格的行和列数;
- GridLayout( int rows, int cols,int hgap , int vgap ) 指定网格的行和列数;并指定每个网格的上下间隔;
try { BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated; org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF(); } catch(Exception e) { //TODO exception } // 创建窗体对象 JFrame jFrame =new JFrame(); // 设置窗体大小 jFrame.setSize(600, 400); // 设置窗体全屏展示 //jFrame.setExtendedState(JFrame.MAXIMIZED_BOTH); // 设置窗体显示位置 //jFrame.setLocation(100,200); // 设置窗体显示正中间 jFrame.setLocationRelativeTo(null); // 设置窗体标题 jFrame.setTitle("窗体标题"); // 设置窗体不可全屏显示 //jFrame.setResizable(false); // 设置窗体关闭后退出程序 jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置此窗口是否应该始终位于其他窗口上方 jFrame.setAlwaysOnTop(true); // 设置窗体图标 jFrame.setIconImage(new ImageIcon(HelloWorld.class.getResource("/images/book.png")).getImage()); // 设置窗体可见 jFrame.setVisible(true); // 创建网格布局对象 GridLayout gridLayout=new GridLayout(3,2,10,10); // 容器添加布局管理器 JPanel jPanel =new JPanel(gridLayout); JButton btn01 =new JButton("Button01"); JButton btn02 =new JButton("Button02"); JButton btn03 =new JButton("Button03"); JButton btn04 =new JButton("Button04"); JButton btn05 =new JButton("Button05"); // 将组件添加到容器中 jPanel.add(btn01); jPanel.add(btn02); jPanel.add(btn03); jPanel.add(btn04); jPanel.add(btn05); // 将容器添加到窗口 jFrame.setContentPane(jPanel);
3 .绝对布局( 空布局 )
1. 绝对布局需要设置每个组件的坐标以及宽高,否则不显示;
2. 对于其他布局如果要设置宽和高,一般会遵循以下两点:
2.1, 如果在窗口显示之后在添加新的组件,则该组件会被当做绝对布局,需要设置位置和宽高;
2.2 , 如果在窗口显示之后 修改之前组件的宽和高,则该组件也会被当中绝对布局;
try { BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated; org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF(); } catch(Exception e) { //TODO exception } // 创建窗体对象 JFrame jFrame =new JFrame(); // 设置窗体大小 jFrame.setSize(600, 400); // 设置窗体全屏展示 //jFrame.setExtendedState(JFrame.MAXIMIZED_BOTH); // 设置窗体显示位置 //jFrame.setLocation(100,200); // 设置窗体显示正中间 jFrame.setLocationRelativeTo(null); // 设置窗体标题 jFrame.setTitle("窗体标题"); // 设置窗体不可全屏显示 //jFrame.setResizable(false); // 设置窗体关闭后退出程序 jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置此窗口是否应该始终位于其他窗口上方 jFrame.setAlwaysOnTop(true); // 设置窗体图标 jFrame.setIconImage(new ImageIcon(HelloWorld.class.getResource("/images/book.png")).getImage()); // 创建容器 JPanel jPanel =new JPanel(); // 添加空布局管理器 jPanel.setLayout(null); JButton btn01 =new JButton("Button01"); //btn01.setLocation(0, 0); //btn01.setSize(200,40); // 等同于 setLocation + setSize btn01.setBounds(0, 0, 200, 40); JButton btn02 =new JButton("Button02"); btn02.setLocation(220, 0); btn02.setSize(200,40); // 将组件添加到容器中 jPanel.add(btn01); jPanel.add(btn02); // 将容器添加到窗口 jFrame.setContentPane(jPanel); // 设置窗体可见 jFrame.setVisible(true);
4 .边框布局( BorderLayout)
1. 边框布局是将容器分为 东西南北中5个区域,每个区域只能放置一个组件;
2. 添加组件不知道区域,则默认是在中间区域:
3. 中间区域有组件,但是四周某个区域组件缺少时,中间组件会占据缺少组件的那个区域;
构造方法:
- BorderLayout ( ) ;
- BorderLayout ( iint hgap , int vgap ) 指定每个区域的上下间隔
try { BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated; org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF(); } catch(Exception e) { //TODO exception } // 创建窗体对象 JFrame jFrame =new JFrame(); // 设置窗体大小 jFrame.setSize(800, 500); // 设置窗体全屏展示 //jFrame.setExtendedState(JFrame.MAXIMIZED_BOTH); // 设置窗体显示位置 //jFrame.setLocation(100,200); // 设置窗体显示正中间 jFrame.setLocationRelativeTo(null); // 设置窗体标题 jFrame.setTitle("窗体标题"); // 设置窗体不可全屏显示 //jFrame.setResizable(false); // 设置窗体关闭后退出程序 jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置此窗口是否应该始终位于其他窗口上方 jFrame.setAlwaysOnTop(true); // 设置窗体图标 jFrame.setIconImage(new ImageIcon(HelloWorld.class.getResource("/images/book.png")).getImage()); // 创建容器 JPanel jPanel =new JPanel(); // 添加边框局管理器 BorderLayout borderLayout =new BorderLayout(5,10); jPanel.setLayout(borderLayout); JButton btn01 =new JButton("Button01"); JButton btn02 =new JButton("Button02"); JButton btn03 =new JButton("Button03"); JButton btn04 =new JButton("Button04"); JButton btn05 =new JButton("Button05"); // 将组件添加到容器中 jPanel.add(btn01,BorderLayout.EAST); jPanel.add(btn02,BorderLayout.SOUTH); jPanel.add(btn03,BorderLayout.NORTH); jPanel.add(btn04,BorderLayout.WEST); jPanel.add(btn05,BorderLayout.CENTER); // 将容器添加到窗口 jFrame.setContentPane(jPanel); // 设置窗体可见 jFrame.setVisible(true);
5 .箱子布局(BxoLayout)
1. 把若干个组件按照水平或垂直方向依次排列位置;使用Box提供的静态方法可以快速的创建水平或垂直容器以及可以填充组件之间的空隙不可见组件;
;
try { BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated; org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF(); } catch(Exception e) { //TODO exception } // 创建窗体对象 JFrame jFrame =new JFrame(); // 设置窗体大小 jFrame.setSize(800, 500); // 设置窗体全屏展示 //jFrame.setExtendedState(JFrame.MAXIMIZED_BOTH); // 设置窗体显示位置 //jFrame.setLocation(100,200); // 设置窗体显示正中间 jFrame.setLocationRelativeTo(null); // 设置窗体标题 jFrame.setTitle("窗体标题"); // 设置窗体不可全屏显示 //jFrame.setResizable(false); // 设置窗体关闭后退出程序 jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置此窗口是否应该始终位于其他窗口上方 jFrame.setAlwaysOnTop(true); // 设置窗体图标 jFrame.setIconImage(new ImageIcon(HelloWorld.class.getResource("/images/book.png")).getImage()); JButton btn01 =new JButton("Button01"); JButton btn02 =new JButton("Button02"); JButton btn03 =new JButton("Button03"); JButton btn04 =new JButton("Button04"); JButton btn05 =new JButton("Button05"); //创建一个水平方向的箱子容器 Box hbox =Box.createHorizontalBox(); hbox.add(btn01); hbox.add(btn02); hbox.add(btn03); //创建一个水平方向的箱子容器 Box hbox2 =Box.createHorizontalBox(); hbox2.add(btn04); // 添加一个水平方向不可见的组件 hbox2.add(Box.createHorizontalGlue()); // 添加一个水平方向不可见的组件(带有宽度的不可见组件) //hbox2.add(Box.createHorizontalStrut(10)); // 添加一个不可见的组件(带有宽度和高度的不可见组件) //hbox2.add(Box.createRigidArea(new Dimension(10,20))); hbox2.add(btn05); // 创建一个垂直方向的容器,装hbox和 hbox2两个水平容器 Box xbox=Box.createVerticalBox(); xbox.add(hbox); // 添加一个垂直方向的不可见组件(带有高度的) //xbox.add(Box.createVerticalStrut(10)); xbox.add(hbox2); // 将容器添加到窗口 jFrame.setContentPane(xbox); // 让组件去除中多多余的空白,让窗口自适应当前组件显示的大小(可设置或可不设置) jFrame.pack(); // 设置窗体可见 jFrame.setVisible(true);
6 .卡片布局(BxoLayout)
1. 将容器里面的每一个组件看着是一张卡片,容器则充当堆栈,每次只能显示一张卡片,默认显示第一张卡片;
try { BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated; org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF(); } catch(Exception e) { //TODO exception } // 创建窗体对象 JFrame jFrame =new JFrame(); // 设置窗体大小 jFrame.setSize(800, 500); // 设置窗体全屏展示 //jFrame.setExtendedState(JFrame.MAXIMIZED_BOTH); // 设置窗体显示位置 //jFrame.setLocation(100,200); // 设置窗体显示正中间 jFrame.setLocationRelativeTo(null); // 设置窗体标题 jFrame.setTitle("窗体标题"); // 设置窗体不可全屏显示 //jFrame.setResizable(false); // 设置窗体关闭后退出程序 jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置此窗口是否应该始终位于其他窗口上方 jFrame.setAlwaysOnTop(true); // 设置窗体图标 jFrame.setIconImage(new ImageIcon(HelloWorld.class.getResource("/images/book.png")).getImage()); // 创建卡片布局管理器 CardLayout cardLayout =new CardLayout(); // 创建容器 JPanel jPanel =new JPanel(cardLayout); JButton btn01 =new JButton("Button01"); JButton btn02 =new JButton("Button02"); JButton btn03 =new JButton("Button03"); JButton btn04 =new JButton("Button04"); JButton btn05 =new JButton("Button05"); jPanel.add(btn01,"b1"); jPanel.add(btn02,"b2"); jPanel.add(btn03,"b3"); jPanel.add(btn04,"b4"); jPanel.add(btn05,"b5"); //指定显示的组件 cardLayout.show(jPanel, "b2"); //cardLayout.first(jPanel);显示第一个组件 //cardLayout.last(jPanel);显示最后一个组件 //cardLayout.next(jPanel);显示下一个组件 //cardLayout.previous(jPanel);显示上一个组件 jFrame.setContentPane(jPanel); // 让组件去除中多多余的空白,让窗口自适应当前组件显示的大小(可设置或可不设置) // 设置窗体可见 jFrame.setVisible(true);