卡片佈局可以讓多個組件共享同一個顯示空間,共享空間的組件之間的關係就像一疊牌,組件疊在一塊兒,初始時顯示該空間中第一個添加的組件,經過CardLayout類提供的方法能夠切換該空間中顯示的組件。java
一、 CardLayout類的經常使用構造函數及方法docker
二、 使用CardLayout類提供的方法能夠切換顯示該空間中的組件api
例如:Panel cardPanel=new Panel();佈局
(2) 定義卡片對象:CardLayout 佈局對象名稱=new CardLayout();this
例如:CardLayout card=new CardLayout();spa
(3) 設置使用卡片佈局的容器爲卡片佈局:.net
(4) 設置容器中顯示的組件
例如:for (int i = 0; i < 5; i++) {
cardPanel.add(newJButton("按鈕"+i));
}
(5) 定義響應事件代碼,讓容器顯示相應的組件
格式:
n 佈局對象名稱.next(容器名稱) 顯示容器中當前組件以後的一個組件,若當前組件爲最後添加的組件,則顯示第一個組件,即卡片組件顯示是循環的。
n 佈局對象名稱.first(容器名稱) 顯示容器中第一個組件
n 佈局對象名稱.last(容器名稱) 顯示容器中最後一個組件
n 佈局對象名稱.previous(容器名稱) 顯示容器中當前組件以前的一個組件,若當前組件爲第一個添加的組件,則顯示最後一個組件,即卡片組件顯示是循環的。
例如:
card.next(cardPanel);
card.previous(cardPanel);
card.first(cardPanel);
card.last(cardPanel);
實例一:卡片的切換
窗體默認邊界佈局,一個面板以卡片佈局,面板上添加五個按鈕,該面板添加到CENTER位置,另外一個面板添加兩個按鈕,兩個按鈕添加事件來切換顯示CENTER位置中的面板的組件
// cardlayout.Java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;//引入事件包
//定義類時實現監聽接口
public class cardlayout extendsJFrame implements ActionListener{
JButton nextbutton;
JButton preButton;
Panel cardPanel=new Panel();
Panel controlpaPanel=new Panel();
//定義卡片佈局對象
CardLayout card=new CardLayout();
//定義構造函數
public cardlayout() {
super("卡片佈局管理器");
setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
//設置cardPanel面板對象爲卡片佈局
cardPanel.setLayout(card);
//循環,在cardPanel面板對象中添加五個按鈕
//由於cardPanel面板對象爲卡片佈局,所以只顯示最早添加的組件
for (int i = 0; i < 5; i++) {
cardPanel.add(new JButton("按鈕"+i));
}
//實例化按鈕對象
nextbutton=new JButton("下一張卡片");
preButton=new JButton("上一張卡片");
//爲按鈕對象註冊監聽器
nextbutton.addActionListener(this);
preButton.addActionListener(this);
controlpaPanel.add(preButton);
controlpaPanel.add(nextbutton);
//定義容器對象爲當前窗體容器對象
Container container=getContentPane();
//將 cardPanel面板放置在窗口邊界佈局的中間,窗口默認爲邊界佈局
container.add(cardPanel,BorderLayout.CENTER);
// 將controlpaPanel面板放置在窗口邊界佈局的南邊,
container.add(controlpaPanel,BorderLayout.SOUTH);
}
//實現按鈕的監聽觸發時的處理
public void actionPerformed(ActionEvent e){
//若是用戶單擊nextbutton,執行的語句
if (e.getSource()==nextbutton){
//切換cardPanel面板中當前組件以後的一個組件
//若當前組件爲最後添加的組件,則顯示第一個組件,即卡片組件顯示是循環的。
card.next(cardPanel);
}
if (e.getSource()==preButton){
//切換cardPanel面板中當前組件以前的一個組件
//若當前組件爲第一個添加的組件,則顯示最後一個組件,即卡片組件顯示是循環的。
card.previous(cardPanel);
}
}
public static void main(String[] args) {
cardlayout kapian=new cardlayout();
}
}
程序顯示結果以下圖所示,單擊「上一張」、「下一張」等按鈕能夠上面的面板中顯示不一樣的按鈕來。
方法二步驟:
(1) 定義使用卡片佈局的容器
例如:Panel cardPanel=new Panel();
(2) 定義卡片對象:CardLayout 佈局對象名稱=newCardLayout();
例如:CardLayout card=new CardLayout();
(3) 設置使用卡片佈局的容器爲卡片佈局:
例如:cardPanel.setLayout(card);
(4) 設置容器中顯示的組件,同時爲組件命名對應的卡片名稱
例如:for (int i = 0; i < 4; i++) {
cardPanel.add(「0」,newJButton("按鈕"+i));
}
(5) 定義響應事件代碼,讓容器顯示相應的組件
格式:卡片對象名稱.show(容器名稱,卡片名稱)
實例二:使用CardLayout類的show方法顯示組件。
窗體默認邊界佈局,一個面板以卡片佈局,面板上添加4個按鈕,該面板添加到CENTER位置,另外一個面板添加4個按鈕,這4個按鈕添加事件來切換顯示CENTER位置中的面板的組件按鈕。
// cardlayout1.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;//引入事件包
//定義類時 實現監聽接口
public class cardlayout1 extends JFrameimplements ActionListener{
JButton b0,b1,b2,b3;
Panel cardPanel=new Panel();
Panel controlpaPanel=newPanel();
//定義卡片佈局對象
CardLayout card=newCardLayout();
//定義字符數組,爲卡片命名
StringcardName[]={"0","1","2","3"};
//定義構造函數
public cardlayout1() {
super("卡片佈局管理器");
setSize(400,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
//設置cardPanel面板對象爲卡片佈局
cardPanel.setLayout(card);
//循環,在cardPanel面板對象中添加4個按鈕
//由於cardPanel面板對象爲卡片佈局,所以初始時顯示最早添加的組件
for (int i = 0; i< 4; i++) {
//面板中添加的每一個按鈕對應設置一個卡片名
cardPanel.add(cardName[i],newJButton("按鈕"+i));
}
//實例化按鈕對象
b0=newJButton("0");
b1=newJButton("1");
b2=newJButton("2");
b3=newJButton("3");
//爲按鈕對象註冊監聽器
b0.addActionListener(this);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
controlpaPanel.add(b0);
controlpaPanel.add(b1);
controlpaPanel.add(b2);
controlpaPanel.add(b3);
//定義容器對象爲當前窗體容器對象
Containercontainer=getContentPane();
//將 cardPanel面板放置在窗口邊界佈局的中間,窗口默認爲邊界佈局
container.add(cardPanel,BorderLayout.CENTER);
// 將controlpaPanel面板放置在窗口邊界佈局的南邊,
container.add(controlpaPanel,BorderLayout.SOUTH);
}
//實現按鈕的監聽觸發時的處理
public voidactionPerformed(ActionEvent e){
//用戶單擊b0按鈕時執行的語句
if(e.getSource()==b0){
//經過show()方法中的卡片名稱,顯示容器中的組件。
card.show(cardPanel,cardName[0]);
}
if(e.getSource()==b1){
card.show(cardPanel,cardName[1]);
}
if(e.getSource()==b2){
card.show(cardPanel,cardName[2]);
}
if(e.getSource()==b3){
card.show(cardPanel,cardName[3]);
}
}
public static voidmain(String[] args) {
cardlayout1kapian=new cardlayout1();
}
}
程序執行結果: