JavaSwing學習日記(九)CardLayout(卡片佈局)

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結合使用做出以下的效果
在底部添加三個按鈕,一個按鈕對應一個界面,點擊按鈕可以切換界面

實現步驟:

  1. 在這個窗口的主內容面板設置爲BorderLayout佈局(邊界佈局)
  2. 將這個主面板設置爲上下兩層,
  3. 上層用於放置卡片對應的界面,
  4. 下層用於放置按鈕

如下圖

  • 黑色框框爲主面板
  • 紅色爲上層面板
  • 藍色爲下層面板

在這裏插入圖片描述
代碼示例:

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;
            }
        }
    }

}

實現效果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章