1. 程式人生 > 程式設計 >Java Swing CardLayout卡片佈局的實現示例

Java Swing CardLayout卡片佈局的實現示例

1. 概述

官方JavaDocsApi: javax.swing.CardLayout

CardLayout,卡片佈局管理器。它將容器中的每個元件看作一張卡片,一次只能看到一張卡片,容器則充當卡片的堆疊,預設顯示第一張卡片。

CardLayout 構造方法:

// 建立一個間距大小為 0 的卡片佈局
CardLayout()

// 建立一個指定水平/垂直間距大小的卡片佈局。
CardLayout(int hgap,int vgap) 

CardLayout 常用方法:

// 顯示第一張卡片
void first(Container parent);

// 顯示最後一張卡片
void last(Container parent);

// 顯示下一張卡片(自動迴圈顯示)
void next(Container parent);

// 顯示上一張卡片(自動迴圈顯示)
void previous(Container parent);

// 顯示指定名稱的元件(新增元件到容器時,可同時新增元件的名稱)
void show(Container parent,String name);

2. 程式碼例項

package com.xiets.swing;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Main {

  public static void main(String[] args) {
    JFrame jf = new JFrame("測試視窗");
    jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    jf.setSize(300,200);

    // 建立卡片佈局,卡片間水平和豎直間隔為 10
    final CardLayout layout = new CardLayout(10,10);

    // 建立內容面板容器,指定佈局管理器
    final JPanel panel = new JPanel(layout);

    JButton btn01 = new JButton("Button01");
    JButton btn02 = new JButton("Button02");
    JButton btn03 = new JButton("Button03");

    panel.add(btn01,"btn01");
    panel.add(btn02,"btn02");
    panel.add(btn03,"btn03");

    // 先顯示第二個
    layout.show(panel,"btn02");

    jf.setContentPane(panel);
    jf.setLocationRelativeTo(null);
    jf.setVisible(true);

    // 每間隔2秒切換顯示下一個
    new Timer(2000,new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        layout.next(panel);
      }
    }).start();
  }

}

結果展示:

例項一:卡片的切換

窗體預設邊界佈局,一個面板以卡片佈局,面板上新增五個按鈕,該面板新增到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();
    }
 }

程式顯示結果如下圖所示,單擊“上一張”、“下一張”等按鈕可以上面的面板中顯示不同的按鈕來。

例項二:使用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.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();
    }
 }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。