您的位置:首页 > 编程语言 > Java开发

三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)

2016-12-11 02:05 465 查看
摘自 http://blog.csdn.net/liujun13579/article/details/7773945

三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)

卡片布局能够让多个组件共享同一个显示空间,共享空间的组件之间的关系就像一叠牌,组件叠在一起,初始时显示该空间中第一个添加的组件,通过CardLayout类提供的方法可以切换该空间中显示的组件。

1、 CardLayout类的常用构造函数及方法



2、 使用CardLayout类提供的方法可以切换显示该空间中的组件

方法一

步骤:

(1) 定义使用卡片布局的容器

例如:Panel cardPanel=new Panel();

(2) 定义卡片对象:CardLayout 布局对象名称=new CardLayout();

例如:CardLayout card=new CardLayout();

(3) 设置使用卡片布局的容器为卡片布局:

格式:容器名称.setLayout(布局对象名称);

例如: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位置中的面板的组件

程序显示结果如下图所示,单击“上一张卡片”、“下一张卡片”等按钮可以上面的面板中显示不同的按钮来。



package com.wst.bj;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;//引入事件包

//定义类时实现监听接口

public class CardLayoutDemo extends JFrame implements ActionListener {

JButton nextbutton;

JButton preButton;

Panel cardPanel = new Panel();

Panel controlpaPanel = new Panel();

// 定义卡片布局对象

CardLayout card = new CardLayout();

// 定义构造函数

public CardLayoutDemo() {

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

}

}
}


方法二

步骤:

(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位置中的面板的组件按钮。

程序执行结果:



1 package com.wst.bj;
2
3 import java.awt.*;
4
5 import javax.swing.*;
6
7 import java.awt.event.*;//引入事件包
8
9 //定义类时 实现监听接口
10
11 public class CardLayoutDemo2 extends JFrame implements ActionListener {
12
13     JButton b0, b1, b2, b3;
14
15     Panel cardPanel = new Panel();
16
17     Panel controlpaPanel = new Panel();
18
19     // 定义卡片布局对象
20
21     CardLayout card = new CardLayout();
22
23     // 定义字符数组,为卡片命名
24
25     String cardName[]=
26     {"0","1","2","3"};
27
28     // 定义构造函数
29
30     public CardLayoutDemo2() {
31
32         super("卡片布局管理器");
33
34         setSize(400, 200);
35
36         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
37
38         setLocationRelativeTo(null);
39
40         setVisible(true);
41
42         // 设置cardPanel面板对象为卡片布局
43
44         cardPanel.setLayout(card);
45
46         // 循环,在cardPanel面板对象中添加4个按钮
47
48         // 因为cardPanel面板对象为卡片布局,因此初始时显示最先添加的组件
49
50         for (int i = 0; i < 4; i++) {
51
52             // 面板中添加的每个按钮对应设置一个卡片名
53
54             cardPanel.add(cardName[i], new JButton("按钮" + i));
55
56         }
57
58         // 实例化按钮对象
59
60         b0 = new JButton("0");
61
62         b1 = new JButton("1");
63
64         b2 = new JButton("2");
65
66         b3 = new JButton("3");
67
68         // 为按钮对象注册监听器
69
70         b0.addActionListener(this);
71
72         b1.addActionListener(this);
73
74         b2.addActionListener(this);
75
76         b3.addActionListener(this);
77
78         controlpaPanel.add(b0);
79
80         controlpaPanel.add(b1);
81
82         controlpaPanel.add(b2);
83
84         controlpaPanel.add(b3);
85
86         // 定义容器对象为当前窗体容器对象
87
88         Container container = getContentPane();
89
90         // 将 cardPanel面板放置在窗口边界布局的中间,窗口默认为边界布局
91
92         container.add(cardPanel, BorderLayout.CENTER);
93
94         // 将controlpaPanel面板放置在窗口边界布局的南边,
95
96         container.add(controlpaPanel, BorderLayout.SOUTH);
97
98     }
99
100     // 实现按钮的监听触发时的处理
101
102     public void actionPerformed(ActionEvent e){
103
104                 //用户单击b0按钮时执行的语句
105
106                 if(e.getSource()==b0){
107
108                          //通过show()方法中的卡片名称,显示容器中的组件。
109
110                          card.show(cardPanel,cardName[0]);
111
112                 }
113
114                 if(e.getSource()==b1){
115
116                          card.show(cardPanel,cardName[1]);
117
118                 }
119
120                 if(e.getSource()==b2){
121
122                          card.show(cardPanel,cardName[2]);
123
124                 }
125
126                 if(e.getSource()==b3){
127
128                          card.show(cardPanel,cardName[3]);
129
130                 }
131
132       }
133 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐