下面通过代码实例来熟悉下它的使用:
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * CardLayout * Created by veione on 5/9/16. */ public class CardLayoutCase extends JFrame{ //主要的JPanel,该JPanel的布局管理器将被设置成CardLayout private JPanel pane=null; private JPanel btnPanel=null; private CardLayout cardLayout=null; private JButton btnPrevious=null; private JButton btnNext=null; private JButton btnDot1=null; private JButton btnDot2=null; private JButton btnDot3=null; private JPanel panel1,panel2,panel3; public CardLayoutCase(){ super("CardLayout"); cardLayout=new CardLayout(5,5); pane=new JPanel(cardLayout); btnPrevious=new JButton("< 上一步"); btnNext=new JButton("下一步 >"); btnDot1=new JButton("1"); btnDot2=new JButton("2"); btnDot3=new JButton("3"); btnDot3.setMargin(new Insets(2,2,2,2)); btnDot2.setMargin(new Insets(2,2,2,2)); btnDot1.setMargin(new Insets(2,2,2,2)); //构造放按钮的面板容器 btnPanel=new JPanel(); btnPanel.add(btnPrevious); btnPanel.add(btnDot1); btnPanel.add(btnDot2); btnPanel.add(btnDot3); btnPanel.add(btnNext); //显示的面板1-2-3 panel1=new JPanel(); panel2=new JPanel(); panel3=new JPanel(); panel1.setBackground(Color.red); panel2.setBackground(Color.cyan); panel3.setBackground(Color.green); panel1.add(new JLabel("面板1")); panel2.add(new JLabel("面板2")); panel3.add(new JLabel("面板3")); //将3个面板添加到上层容器中 pane.add(panel1,"panel1"); pane.add(panel2,"panel2"); pane.add(panel3,"panel3"); //给按钮添加事件 btnPrevious.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { cardLayout.previous(pane); } }); btnNext.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { cardLayout.next(pane); } }); btnDot1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { cardLayout.show(pane,"panel1"); } }); btnDot2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { cardLayout.show(pane,"panel2"); } }); btnDot3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { cardLayout.show(pane,"panel3"); } }); this.getContentPane().add(pane); this.getContentPane().add(btnPanel,BorderLayout.SOUTH); setDefaultCloseOperation(Tools.EXIT_ON_CLOSE); setSize(300,200); Tools.centerWindow(this); setVisible(true); } public static void main(String[] args) { new CardLayoutCase(); } } BoxLayout箱式布局比较灵活,也比较使用。Swing提供的BOX类就是箱式布局类,它的默认布局管理器就是BoxLayout,在箱式布局管理器中包括两种箱子:一种是水平箱,另外一种是垂直箱。
创建一个水平箱的代码如下:
Box horBox=Box.createHorizontalBox()
创建一个垂直箱的代码如下:
Box verBox=Box.createVerticalBox()
创建好箱子后,就可以像添加其它组件一样添加下面的控件,代码如下:
horBox.add(okBtn);
verBox.add(cancelBtn);
两种箱子的区别在于组件的排列顺序,水平箱是按照从左到右的顺序排列,而垂直箱按照从上到下的顺序排列。对于箱式布局管理器而言,最关键的就是每个组件的3个尺寸。
首选尺寸,即组件显示时的宽度和高度。
最大尺寸,即组件能被显示的最大宽度和高度
最小尺寸,即组件被显示的最小高度和最小宽度
下面是水平箱式布局管理器中组件排列的几个重点: