JavaSwing學習日記(九)
CardLayout(卡片佈局)
從概念上講,CardLayout管理的每個組件都像撲克牌或堆棧中的卡,其中在任何時候都只有頂部的卡可見。也就是說一次僅可見一個組件。就像一副撲克牌堆在桌子上面,你只能看到第一張,如果你想看到下一張,你只能把第一張拿掉,如果你想看中間的,你只能把中間的撲克牌抽到最上面來看,這就是一次只可以看一個組件。
CardLayout的構造方法
//創建一個新的卡片佈局,其大小爲零。
CardLayout cardLayout = new CardLayout()
// 創建具有指定的水平和垂直間隙的新卡布局。
CardLayout cardLayout = new CardLayout(int hgap, int vgap)
CardLayout的常用方法
注意:Container parent這個參數就是將佈局設置爲CardLayout的面板控件
String name這個參數就是指定的卡片的名字
//用於翻轉到給定容器的下一張卡片。
public void next(Container parent)
//用於翻轉到給定容器的上一張卡片。
public void previous(Container parent)
//用於翻轉到給定容器的第一張卡片。
public void first(Container parent)
//用於翻轉到給定容器的最後一張卡片。
public void last(Container parent)
//用於翻轉到具有給定名稱的指定卡。
public void show(Container parent,String name)
爲了將表示卡布局的效果最好,我們將會用BorderLayout和CardLayout結合使用做出以下的效果
在底部添加三個按鈕,一個按鈕對應一個界面,點擊按鈕可以切換界面
實現步驟:
- 在這個窗口的主內容面板設置爲BorderLayout佈局(邊界佈局)
- 將這個主面板設置爲上下兩層,
- 上層用於放置卡片對應的界面,
- 下層用於放置按鈕
如下圖
- 黑色框框爲主面板
- 紅色爲上層面板
- 藍色爲下層面板
代碼示例:
package test.webmode;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class CardLayouMode{
static JPanel jPanelCenter;
public static void main(String[] args) {
//創建一個窗口
JFrame jFrame = new JFrame("卡布局");
//設置窗口布局爲邊界佈局
jFrame.setLayout(new BorderLayout());
//創建一個用於存放CardLayout並放置於邊界佈局的中間的面板
jPanelCenter = new JPanel();
//將jPanel設置爲卡布局
jPanelCenter.setLayout(new CardLayout());
//創建三個面板充當卡片
JPanel jPanel1 = new JPanel();
jPanel1.setBackground(Color.CYAN);
JPanel jPanel2 = new JPanel();
jPanel2.setBackground(Color.orange);
JPanel jPanel3 = new JPanel();
jPanel3.setBackground(Color.DARK_GRAY);
//分別爲三個面板添加文本標籤
jPanel1.add(new JLabel("文本標籤1"));
jPanel2.add(new JLabel("文本標籤2"));
jPanel3.add(new JLabel("文本標籤3"));
//將三個面板放置進放置於邊界佈局的中間的面板jPanelTop併爲他們設置名字
jPanelCenter.add(jPanel1,"name1");
jPanelCenter.add(jPanel2,"name2");
jPanelCenter.add(jPanel3,"name3");
//創建一個用於存放按鈕並放置於邊界佈局的下面邊界的面板
JPanel jPanelBottom = new JPanel();
//創建三個按鈕放置於底部面板
JButton jButton = new JButton("按鈕");
JButton jButton2 = new JButton("按鈕2");
JButton jButton3 = new JButton("按鈕3");
//創建SimpleListener用於監聽點擊事件
SimpleListener simpleListener = new SimpleListener();
//爲三個按鈕設置點擊監聽
jButton.addActionListener(simpleListener);
jButton2.addActionListener(simpleListener);
jButton3.addActionListener(simpleListener);
//將三個按鈕添加進底部面板
jPanelBottom.add(jButton,"jButton");
jPanelBottom.add(jButton2,"jButton2");
jPanelBottom.add(jButton3,"jButton3");
//將兩個面板放入窗口
jFrame.add(jPanelCenter,BorderLayout.CENTER);
jFrame.add(jPanelBottom,BorderLayout.PAGE_END);
jFrame.setSize(300,300);
jFrame.setVisible(true);
}
/**
* 用於監聽點擊事件
*/
static class SimpleListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent actionEvent) {
//取出jPanelTop的佈局器cardLayout
CardLayout cardLayout = (CardLayout) jPanelCenter.getLayout();
//取出被點擊按鈕的名字
String btnName = actionEvent.getActionCommand();
System.out.println(btnName);
//判斷是哪個按鈕被點擊
switch (btnName){
case "按鈕":
//在jPanelTop顯示第一張
cardLayout.first(jPanelCenter);
break;
case "按鈕2":
//在jPanelTop顯示名字爲name2的卡片
cardLayout.show(jPanelCenter,"name2");
break;
case "按鈕3":
//在jPanelTop顯示最後一張卡片
cardLayout.last(jPanelCenter);
break;
}
}
}
}
實現效果: