流布局FlowLayout
流布局是控件按行排列,排满则换行。
设置布局类型:
LayoutManager layout = new FlowLayout(FlowLayout.LEFT);//参数LEFT表示左对齐,改为CENTER为居中对齐,默认是居中contentPane.setLayout(layout);
边界布局BorderLayout
控件按照上下左右中5个位置放置。
在添加控件时可以指定位置:contentPane.add(a1,BorderLayout.PAGE_STRAT)
这里有五种参数来表示控件位置:PAGE_START, PAGE_END, LINE_START, LINE_END, CENTER
卡片布局CardLayout
卡片布局是将界面像卡片一样叠起来,可以用一个下拉列表或其他方法来切换页面。JPanel是一个流布局的容器。可以使用JPanel来建立子布局器,用多重嵌套的方式实现复杂的布局。
代码示例:
public class MyFrame extends JFrame{
private static final long serialVersionUID = 1L;
JLabel str = new JLabel("事例文本");
JButton button = new JButton("确定");
JTextField tf = new JTextField(16)
JComboBox<String> cList = new JComboBox<>();
JPanel cards = new JPanel();
public MyFrame(){
}
public MyFrame(String title){
super(title);
//给顶层容器设置BorderLayout
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());
//创建一个供选择的下拉列表
contentPane.add(str);
cList.addItem("面板1");
cList.addItem("面板2");
contentPane.add(cList,BorderLayout.PAGE_START);
contentPane.add(cards,BorderLayout.CENTER);
//创建第一个面板
JPanel p1 = new JPanel();
p1.add(button);
//创建第二个面板
JPanel p2 = new JPanel();
p2.add(str);
p2.add(tf);
//子容器设置卡片布局,将p1、p2加入到卡片布局中,并且各自取名“buttons”和“text”,便于管理
cards.setLayout(new CardLayout());
cards.add(p1,"buttons");
cards.add(p2,"text");
//事件响应,
cList.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent a){
itemChanged();
}
});
}
public void itemChanged(){
CardLayout cl = (CardLayout)cards.getLayout();
int index = cList.getSelectedIndex();//按照索引切换界面
if(index == 0){
cl.show(cards,"buttons");//用show来展示当前页面,参数是布局容器和卡片名称
}else if(index == 1){
cl.show(cards,"text");
}
}
}