1.流式布局FlowLayout
public void pack()调整此窗口的大小,以适合其子组件的首选大小和布局。如果该窗口或其所有者仍不可显示,则两者在计算首选大小之前变得可显示。在计算首选大小之后,将会验证该Window。窗口自动适应大小,使窗口能正好显示里面所有的控件。
import java.awt.*;public class FlowLayoutDemo {public static void main(String[] args) {Frame frame = new Frame("这里测试FlowLayout");//1.通过setLayout方法设置容器的布局管理器// frame.setLayout(new FlowLayout(FlowLayout.LEFT,20,20));//frame.setLayout(new FlowLayout(FlowLayout.CENTER,20,20));frame.setLayout(new FlowLayout(FlowLayout.RIGHT,40,20));//2.添加多个按钮到frame中for (int i = 1; i <= 100; i++) {frame.add(new Button("按钮"+i));}//3.设置最佳大小,pack方法 大小适中frame.pack();frame.setVisible(true);}}
右对齐:
居中对齐:
左对齐:
2.边界布局BorderLayout
当改变使用 BorderLayout 的容器大小时, NORTH 、 SOUTH 和 CENTER区域水平调整,而 EAST 、 WEST 和 CENTER 区域垂直调整。使用BorderLayout 有如下两个注意点:
1. 当向使用 BorderLayout 布局管理器的容器中添加组件时 , 需要指定要添加到哪个区域中 。 如果没有指定添加到哪个区域中,则默认添加到中间区域中,其他区域空出的话,也会被中间区域占用;
2. 如果向同一个区域中添加多个组件时 , 后放入的组件会覆盖先放入的组件
3.网格布局GridLayout
import javax.swing.JFrame;
import java.awt.*;
import javax.swing.*;public class GridLayoutDemo extends JFrame{public static void main(String []args){GridLayoutDemo win = new GridLayoutDemo();}public GridLayoutDemo(){//1.创建对象,并且标题设置为计算器this.setTitle("这是一个计算器的界面");this.setBounds(100,200,500,500);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);init();}public void init(){//2.创建一个Panel对象,并且往Panel中放置一个TextField组件JPanel p1 = new JPanel();p1.add(new JTextField(30));//3.把上述的Panel放入到窗口的北侧区域this.add(p1,BorderLayout.NORTH);//4.创建一个Panel对象,并且设置其布局管理器为GridLayoutJPanel p2 = new JPanel();p2.setLayout(new GridLayout(3,5,4,4));//5.往上述Panel中,放置15个按钮,内容依次是:0,1,2,3,4,5,6,7,8,9,+,-,*,/,.for (int i = 0; i < 10; i++) {p2.add(new Button(i+""));}p2.add(new Button("+"));p2.add(new Button("-"));p2.add(new Button("*"));p2.add(new Button("/"));p2.add(new Button("."));//6.把上述Panel添加到Frame的中间区域中国this.add(p2);//7.设置Frame为最佳大小this.pack();//8.设置Frame可见this.setVisible(true);}}
4.卡片布局CardLayout
import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class CardLayoutDemo extends JFrame{public static void main(String []args){CardLayoutDemo win = new CardLayoutDemo();}public CardLayoutDemo(){init();this.setTitle("卡片布局");this.setBounds(100,200,500,500);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}public void init(){//2.创建一个String数组,存储不同卡片的名字String []str={"第一张","第二张","第三张","第四张","第五张"};//3.创建一个Panel容器p1,并设置其布局管理器为CardLayout,用来存放多张卡片JPanel panel1 = new JPanel();CardLayout cardLayout =new CardLayout();panel1.setLayout(cardLayout);//4.往p1中存储5个Button按钮,名字从String数组中取for(int i=0;i<str.length;i++){panel1.add(str[i],new JButton(str[i]));}//5.创建一个Panel容器p2,用来存储5个按钮,完成卡片的切换JPanel panel2 = new JPanel();//6.创建5个按钮,并给按钮设置监听器ActionListener listener = new ActionListener()//8.把p1添加到frame的中间区域{@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO 自动生成的方法存根String Command = arg0.getActionCommand();switch(Command){case "上一张":cardLayout.previous(panel1);break;case "下一张":cardLayout.next(panel1);break;case "第一张":cardLayout.first(panel1);break;case "最后一张":cardLayout.last(panel1);break;case "第三张":cardLayout.show(panel1,"第三张");break;}}};Button b1 = new Button("上一张");Button b2 = new Button("下一张");Button b3 = new Button("第一张");Button b4 = new Button("最后一张");Button b5 = new Button("第三张");b1.addActionListener(listener);b2.addActionListener(listener);b3.addActionListener(listener);b4.addActionListener(listener);b5.addActionListener(listener);//7.把5个按钮添加到p2中panel2.add(b1);panel2.add(b2);panel2.add(b3);panel2.add(b4);panel2.add(b5);//8.把p1添加到frame的中间区域this.add(panel1);//9.把p2添加到frame的底部区域this.add(panel2,BorderLayout.SOUTH);
}
}
5.BoxLayout盒式布局
import javax.swing.JFrame;
import javax.swing.*;
import java.awt.*;public class BoxLayoutDemo extends JFrame{public static void main(String []args){BoxLayoutDemo boxLayout = new BoxLayoutDemo();}public BoxLayoutDemo(){init();this.setTitle("BoxLayout盒式容器");this.setBounds(200,200,500,300);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}public void init(){JPanel panel = new JPanel();panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS));//panel.setLayout(new BoxLayout(panel,BoxLayout.X_AXIS));JButton button1 = new JButton("按钮1");JButton button2 = new JButton("按钮2");panel.add(button1);panel.add(button2);this.pack();this.add(panel);}
}
import javax.swing.Box;
import javax.swing.*;
import java.awt.*;public class box extends JFrame{public static void main(String []args){box boxlayout = new box();}public box(){init();//1.创建Frame对象this.setTitle("这里测试BoxLayout");this.setBounds(200,200,500,300);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}public void init(){//2.创建一个横向的Box,并添加两个按钮Box hBox = Box.createHorizontalBox();hBox.add(new JButton("水平按钮一"));hBox.add(Box.createHorizontalGlue());//两个方向都可以拉伸的间隔hBox.add(new JButton("水平按钮二"));hBox.add(Box.createHorizontalStrut(10));//水平间隔固定,垂直间方向可以拉伸hBox.add(new JButton("水平按钮3"));//3.创建一个纵向的Box,并添加两个按钮Box vBox = Box.createVerticalBox();vBox.add(new JButton("垂直按钮一"));vBox.add(Box.createVerticalGlue());//两个方向都可以拉伸的间隔vBox.add(new JButton("垂直按钮二"));vBox.add(Box.createVerticalStrut(10));//垂直间隔固定,水平方向可以拉伸vBox.add(new JButton("垂直按钮三"));//4.把box容器添加到frame容器中this.add(hBox, BorderLayout.NORTH);this.add(vBox);//5.设置frame最佳大小并可见}}