热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

JavaSwingCardLayout卡片布局的实现示例

这篇文章主要介绍了JavaSwingCardLayout卡片布局的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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.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();
    }
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了电流源并联合并的方法,以及谐振电路的原理。谐振电路具有很强的选频能力,通过将电感和电容连接在一起,电流和电压会产生震荡。谐振频率的大小取决于电感和电容的大小,而电路中的电阻会逐渐降低震荡的幅度。电阻和电容组成的电路中,当电容放完电后,电阻两端的电压为0,电流不再流过电容。然而,电感是一种特殊的器件,当有电流流过时,线圈会产生感应磁场,阻止电流的流动,从而使电流不会减小。 ... [详细]
  • 标题: ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • 本文介绍了在Docker容器技术中限制容器对CPU的使用的方法,包括使用-c参数设置容器的内存限额,以及通过设置工作线程数量来充分利用CPU资源。同时,还介绍了容器权重分配的情况,以及如何通过top命令查看容器在CPU资源紧张情况下的使用情况。 ... [详细]
  • 集合的遍历方式及其局限性
    本文介绍了Java中集合的遍历方式,重点介绍了for-each语句的用法和优势。同时指出了for-each语句无法引用数组或集合的索引的局限性。通过示例代码展示了for-each语句的使用方法,并提供了改写为for语句版本的方法。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • position属性absolute与relative的区别和用法详解
    本文详细解读了CSS中的position属性absolute和relative的区别和用法。通过解释绝对定位和相对定位的含义,以及配合TOP、RIGHT、BOTTOM、LEFT进行定位的方式,说明了它们的特性和能够实现的效果。同时指出了在网页居中时使用Absolute可能会出错的原因,即以浏览器左上角为原始点进行定位,不会随着分辨率的变化而变化位置。最后总结了一些使用这两个属性的技巧。 ... [详细]
  • 开发笔记:Docker 上安装启动 MySQL
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Docker上安装启动MySQL相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了Java的公式汇总及相关知识,包括定义变量的语法格式、类型转换公式、三元表达式、定义新的实例的格式、引用类型的方法以及数组静态初始化等内容。希望对读者有一定的参考价值。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • 本文介绍了一种图片处理应用,通过固定容器来实现缩略图的功能。该方法可以实现等比例缩略、扩容填充和裁剪等操作。详细的实现步骤和代码示例在正文中给出。 ... [详细]
author-avatar
小白家的世界
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有