设为首页 加入收藏

TOP

Java布局管理器之CardLayout(卡片布局管理器)(一)
2015-07-16 12:55:58 来源: 作者: 【 】 浏览:2
Tags:Java 布局 管理 CardLayout 卡片

对于选项卡这个概念大家可能不会陌生,就是在一个窗口中可以切换显示多页不同的内容,但同一时间只能是其中的某一页可见的,这样的一个个的页面就是选项卡。


CardLayout就是类似的这样一个布局管理器,它能够让多个组件共享同一个显示空间,共享空间的组件之间的关系就像重叠在一起的一幅扑克牌,组件重叠在一起,初始时显示该空间中第一个组件,通过CardLayout类提供的方法可以切换该空间中显示的组件。


下面我们来看一个例子,实现CardLayout布局管理器的使用。


创建一个使用CardLayout布局的面板:
// 卡片布局管理器
private CardLayout cardLayout;
// 使用卡片布局管理器的面板
private JPanel cardPnl;


cardLayout = new CardLayout();
cardPnl = new JPanel(cardLayout);



向面板中添加几张图片,因为面板使用卡片布局,所以所添加的图片是重叠在一起的:
/* 向面板中添加几张图片 */
for (int i = 0; i < 8; i++) {
? ? final int j = i + 1;
? ? // 将图片绘制到面板中
? ? JPanel img = new JPanel() {
? ? ? ? private static final long serialVersionUID = 1L;
? ? ? ? @Override
? ? ? ? protected void paintComponent(Graphics g) {
? ? ? ? ? ? g.drawImage(
? ? ? ? ? ? ? ? ? ? Toolkit.getDefaultToolkit().getImage(
? ? ? ? ? ? ? ? ? ? ? ? ? ? "images/Freedom" + j + ".gif"), 0, 0, null);
? ? ? ? }
? ? };
? ? // 将图片面板添加到使用了CardLayout的容器面板中
? ? cardPnl.add("Freedom" + j, img);
}



添加两个按钮,用于显示上一张图片与下一张图片,并为按钮注册事件监听器,处理事件的方法:
/**
?* 处理按钮点击事件
?*/
@Override
public void actionPerformed(ActionEvent e) {
? ? String cmd = e.getActionCommand(); // 获取是何种操作
? ? if ("next".equals(cmd)) // 显示下一张图片
? ? ? ? cardLayout.next(cardPnl); // 切换下一个选项卡
? ? else if ("previous".equals(cmd)) // 显示上一张图片
? ? ? ? cardLayout.previous(cardPnl); // 切换上一个选项卡
}



我们可以通过调用CardLayout的next()方法翻转到指定容器的下一张卡片,如果当前的可见卡片是最后一个,则翻转到布局的第一张卡片。同样,也可以使用previout()方法翻转到指定容器的前一张卡片。除了这两个方法外,还有last()、first()方法可以翻转到最后一张、第一张卡片,我们也可以直接使用show()方法翻转到指定名称的卡片。


完整示例代码:


package cardLayout;


import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;


/**
?* 测试卡片布局管理器 如果插入图片的名字不相同的话,就要用多个面板去绘制,因为一个面板只装一张图。名字相同就可以用循环。
?*
?* @author hellokitty燕
?*
?*/
public class CardLayoutDemo2 extends JFrame implements ActionListener {


? ? private static final long serialVersionUID = 1L;


? ? private CardLayout cardLayout;// 卡片布局管理器
? ? private JPanel jPanel;// 使用卡片布局管理器的面板
? ? private JTextField jTextField;// 用于你输入的跳转页面


? ? public CardLayoutDemo2() {


? ? ? ? setTitle("布局管理器之CardLayout");
? ? ? ? setSize(600, 600);
? ? ? ? setDefaultCloseOperation(EXIT_ON_CLOSE);
? ? ? ? setLocationRelativeTo(null);


? ? ? ? /* 创建两个按钮,添加到窗体底部,默认窗体布局采用BorderLayout */
? ? ? ? JPanel jp = new JPanel();// 面板默认布局使用FlowLayout


? ? ? ? JButton up = new JButton("上一张");
? ? ? ? JButton next = new JButton("下一张");
? ? ? ? jTextField = new JTextField("2");
? ? ? ? JButton go = new JButton("go");


? ? ? ? jp.add(up);
? ? ? ? jp.add(next);
? ? ? ? jp.add(jTextField);
? ? ? ? jp.add(go);
? ? ? ? // 注册按钮监听事件


? ? ? ? up.addActionListener(this);
? ? ? ? next.addActionListener(this);
? ? ? ? go.addActionListener(this);
? ? ? ? this.add(jp, BorderLayout.SOUTH);


? ? ? ? /* 创建使用CardLayout布局管理器的容器 */
? ? ? ? cardLayout = new CardLayout();
? ? ? ? jPanel = new JPanel(cardLayout);


? ? ? ? /* 向面板中添加几张图片 */


? ? ? ? // 将图片绘制到面板中 /
? ? ? ? JPanel images = new JPanel() {
? ? ? ? ? ? private static final long serialVersionUID = 1L;


? ? ? ? ? ? @Override
? ? ? ? ? ? protected void paintComponent(Graphics g) {
? ? ? ? ? ? ? ? super.paintComponent(g);
? ? ? ? ? ? ? ? g.drawImage(
? ? ? ? ? ? ? ? ? ? ? ? Toolkit.getDefaultToolkit().getImage(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "src/images/sprite.png"), 200, 100, this);


? ? ? ? ? ? }


? ? ? ? };
? ? ? ? // 将图片面板添加到使用了cardLayout容器面板中


? ? ? ? jPanel.add("sprite", images);


? ? ? ? JPanel img = new JPanel() {


? ? ?

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java Graphics 图形绘制 下一篇Java垃圾回收器的工作原理

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: