Java圖形化界面設計——佈局管理器之CardLayout(卡片佈局)

 

         卡片佈局可以讓多個組件共享同一個顯示空間,共享空間的組件之間的關係就像一疊牌,組件疊在一塊兒,初始時顯示該空間中第一個添加的組件,經過CardLayout類提供的方法能夠切換該空間中顯示的組件。java

 

一、  CardLayout類的經常使用構造函數及方法docker

 

 

二、  使用CardLayout類提供的方法能夠切換顯示該空間中的組件api

 

方法一步驟:數組

(1)      定義使用卡片佈局的容器函數

例如:Panel cardPanel=new Panel();佈局

(2)      定義卡片對象:CardLayout 佈局對象名稱=new CardLayout();this

例如:CardLayout card=new CardLayout();spa

(3)      設置使用卡片佈局的容器爲卡片佈局:.net

格式:容器名稱.setLayout(佈局對象名稱);orm

例如:cardPanel.setLayout(card);

(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)      設置使用卡片佈局的容器爲卡片佈局:

格式:容器名稱.setLayout(卡片對象名稱);

例如:cardPanel.setLayout(card);

(4)      設置容器中顯示的組件,同時爲組件命名對應的卡片名稱

格式: 容器名稱. Add(卡片名稱,組件名稱)

例如:for (int i = 0; i < 4; i++) {

                            cardPanel.add(「0」,newJButton("按鈕"+i));

                   }

(5)      定義響應事件代碼,讓容器顯示相應的組件

格式:卡片對象名稱.show(容器名稱,卡片名稱)

例如:card.show(cardPanel,」0」);

 

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

                  

         }

 }

 

程序執行結果:

相關文章
相關標籤/搜索