Java Swing CardLayout卡片布局的实现示例

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

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

(0)

相关推荐

  • Java编程使用卡片布局管理器示例【基于swing组件】

    本文实例讲述了Java编程使用卡片布局管理器.分享给大家供大家参考,具体如下: 运行效果: 完整示例代码: package com.han; import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JB

  • Java Swing CardLayout卡片布局的实现示例

    1. 概述 官方JavaDocsApi: javax.swing.CardLayout CardLayout,卡片布局管理器.它将容器中的每个组件看作一张卡片,一次只能看到一张卡片,容器则充当卡片的堆栈,默认显示第一张卡片. CardLayout 构造方法: // 创建一个间距大小为 0 的卡片布局 CardLayout() // 创建一个指定水平/垂直间距大小的卡片布局. CardLayout(int hgap, int vgap) CardLayout 常用方法: // 显示第一张卡片 vo

  • Java Swing null绝对布局的实现示例

    1. 概述 官方JavaDocsApi: java.awt.Component,java.awt.Container null,绝对布局.绝对布局没有特定一个布局管理器类来表示,给容器的布局管理器设置为 null,就表示使用绝对布局,即通过设置组件的坐标和宽高来布置组件. 绝对布局需要明确指定每一个组件的坐标和宽高,否则不显示. 对于使用其他布局时给组件设置坐标和宽高,一般会遵循以下两点: 使用其他布局时,如果在窗口显示之后,再添加新组件,则该组件也会被当做绝对布局对待(即需要手动指定坐标和宽高

  • Java编程使用箱式布局管理器示例【基于swing组件】

    本文实例讲述了Java编程使用箱式布局管理器.分享给大家供大家参考,具体如下: 先来看看运行效果: 完整代码如下: package awtDemo; import java.awt.BorderLayout; import java.awt.Container; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax

  • Java Swing组件BoxLayout布局用法示例

    本文实例讲述了Java Swing组件BoxLayout布局用法.分享给大家供大家参考,具体如下: BoxLayout 可以把控件依次进行水平或者垂直排列布局,这是通过参数 X_AXIS.Y_AXIS 来决定的.X_AXIS 表示水平排列,而 Y_AXIS 表示垂直排列.BoxLayout 的构造函数有两个参数,一个参数定义使用该 BoxLayout 的容器,另一个参数是指定 BoxLayout 是采用水平还是垂直排列.下面是一个使用 BoxLayout排列控件的例子: JPanel panel

  • Java Swing实现的定制TextField功能示例

    本文实例讲述了Java Swing实现的定制TextField功能.分享给大家供大家参考,具体如下: 先来看看运行效果: 具体代码如下: package themedemo; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.Insets;

  • java swing中实现拖拽功能示例

    java实现拖拽示例 Swing中实现拖拽功能,代码很简单,都有注释,自己看,运行效果如下图: 复制代码 代码如下: package com; import java.awt.*;import java.awt.datatransfer.DataFlavor;import java.awt.dnd.DnDConstants;import java.awt.dnd.DropTarget;import java.awt.dnd.DropTargetAdapter;import java.awt.dn

  • Java Swing组件单选框JRadioButton用法示例

    本文实例讲述了Java Swing组件单选框JRadioButton用法.分享给大家供大家参考,具体如下: JRadioButton是Swing中的单选框.所谓单选框是指,在同一个组内虽然有多个单选框存在,然而同一时刻只能有一个单选框处于选中状态.它就像收音机的按钮,按下一个时此前被按下的会自动弹起,故因此得名.因此,在添加JRadioButton控件时,要记得将它们添加到同一个ButtonGroup中. JRadioButton的常用方法如下图所示: 可以为它添加ActionListener对

  • Java Swing组件实现进度监视功能示例

    本文实例讲述了Java Swing组件实现进度监视功能.分享给大家供大家参考,具体如下: 实例一: import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ProgressMonitor; import javax.swing.Timer; public class TestProgressMonitor { Timer timer; public void init(

  • Java Swing SpringLayout弹性布局的实现代码

    1. 概述 官方JavaDocsApi: javax.swing.SpringLayout javax.swing.SpringLayout.Constraints javax.swing.Spring SpringLayout,弹性布局管理器.使用该布局的容器内的 每一个组件或容器都对应着一个约束,通过该约束定义组件或容器四条边的坐标位置 来实现对组件的布局.该布局主要涉及三个类: SpringLayout.SpringLayout.Constraints.Spring,分别表示 布局管理器.

随机推荐