Java Swing CardLayout卡片佈局的實現示例
阿新 • • 發佈:2020-01-07
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(); } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。