关闭

Swing超基础学习总结——4、CardLayout与ActionListener

标签: swingCardLayout动作监听
672人阅读 评论(0) 收藏 举报
分类:


使用CardLayout制作切换卡

案例代码:

public class CardLayoutAndListenerTest {

    /**
     * @param args
     */
    static JButton preButton;
    static JButton nextButton;

    static Panel controlPanel;
    static Panel cardPanel;

    static CardLayout c;

    public static void main(String[] args) {

        controlPanel = new Panel();
        controlPanel.setLayout(new FlowLayout());
        cardPanel = new Panel();
        cardPanel.setLayout(new FlowLayout());
        c = new CardLayout();

        JFrame frame = new JFrame();
        frame.setSize(300, 200);
        frame.setLayout(new BorderLayout());
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        cardPanel.setLayout(c);

        for (int i = 0; i < 5; i++) {
            // 按顺序添加页,第一个添加在最上面,依次类推
            cardPanel.add(new JButton("按钮" + i));
        }
        preButton = new JButton("前一张");
        nextButton = new JButton("后一张");


        //绑定监听
        preButton.addActionListener(actionListener);
        nextButton.addActionListener(actionListener);

        controlPanel.add(preButton);
        controlPanel.add(nextButton);

        frame.add(cardPanel, BorderLayout.CENTER);
        frame.add(controlPanel, BorderLayout.SOUTH);

    }

    //注册监听
    static ActionListener actionListener = new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            //对应某个按钮的变量名
            if (e.getSource() == preButton) {
                // 打开前一页
                c.previous(cardPanel);
            }
            if (e.getSource() == nextButton) {
                // 打开后一页
                c.next(cardPanel);
            }
        }
    };

}

CardLayout详细说明

卡片布局,切换卡片,即局部刷新

给某一容器设置卡片布局后,添加每一个组件都当做是一页,第一个组件即第一页,注意这里是一个组件(也可是一个容器)为一页

“切换卡”主要方法

使用卡片布局的对象执行next方法(后一页)或previous方法(前一页)
方法参数为执行切换卡的容器对象


ActionListener详细说明

使用方法

方法1:
①注册监听:

ActionListener actionListener = new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            ......
        }
};

②绑定监听:

组件对象.addActionListener(actionListener);

方法2:

①实现ActionListener,重写方法

@Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        if (e.getSource() == button) {
            ……
        }
    }

②绑定监听

组件对象.addActionListener(this);

案例代码(统计点击次数):

上述使用方法1已经在CardLayout的代码中展示了,接下的案例是用使用方法2来现实的。

public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ActionFrame actionFrame = new ActionFrame("ActionListener实例");
    }

}

class ActionFrame extends JFrame implements ActionListener {
    JButton button;
    int i = 0;
    JLabel jLabel;

    public ActionFrame(String title) {
        // TODO Auto-generated constructor stub
        setSize(300, 200);
        setTitle(title);
        setLayout(new BorderLayout());
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setVisible(true);

        jLabel = new JLabel("点击次数:0", JLabel.CENTER);
        // 设置JLable中的文字居中
        // jLabel.setHorizontalAlignment(JLabel.CENTER);

        button = new JButton("点击");
        button.addActionListener(this);

        Container container = getContentPane();
        container.add(jLabel, BorderLayout.CENTER);
        container.add(button, BorderLayout.SOUTH);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        if (e.getSource() == button) {
            i++;
            jLabel.setText("点击次数:" + i);
        }
    }

}

注:第一个案例中用了很多static,静态变量是很浪费内存的,但是由于main方法为静态所以全局变量只能用静态变量,因此大部分情况下还是比较适合用第二个案例中的方式。


关于swing的学习还剩下菜单和列表,加油!!

1
0
查看评论

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

卡片布局能够让多个组件共享同一个显示空间,共享空间的组件之间的关系就像一叠牌,组件叠在一起,初始时显示该空间中第一个添加的组件,通过CardLayout类提供的方法可以切换该空间中显示的组件。   1、  CardLayout类的常用构造函数及方法   &#...
  • liujun13579
  • liujun13579
  • 2012-07-23 09:03
  • 59620

Java学习笔记之卡片式布局CardLayout

CardLayout(构造)方法: 方法 说明 public CardLayout() 创建一个间距大小为0的新卡片布局 public CardLayout(int hgap,int vgap) 创建一个具有指定水平间距和垂直间距的新卡片布局。水平间距置于...
  • Liuchang54
  • Liuchang54
  • 2015-11-22 11:12
  • 6458

Java中CardLayout卡片布局管理器使用的小例子

转自: Java中CardLayout卡片布局管理器使用的小例子
  • ltx06
  • ltx06
  • 2014-06-05 17:55
  • 1984

JavaSwing_1.6: CardLayout(卡片布局)

CardLayout,卡片布局管理器。它将容器中的每个组件看作一张卡片,一次只能看到一张卡片,容器则充当卡片的堆栈,默认显示第一张卡片。
  • xietansheng
  • xietansheng
  • 2017-06-04 23:52
  • 674

CARDLAYOUT中判断当前显示的是哪个部件

csdn论坛里搜了半天居然都是要写什么监听的, 麻烦的要死, 其实简单的很啊 //拿到panel和cardlayoutJPanel cardPanel = (JPanel)map.get("cardNewsPanel");CardLayout cardLayout = (Card...
  • zdsdiablo
  • zdsdiablo
  • 2008-01-03 12:13
  • 1826

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

卡片布局能够让多个组件共享同一个显示空间,共享空间的组件之间的关系就像一叠牌,组件叠在一起,初始时显示该空间中第一个添加的组件,通过CardLayout类提供的方法可以切换该空间中显示的组件。   1、  CardLayout类的常用构造函数及方法   &#...
  • u013023344
  • u013023344
  • 2014-12-30 16:39
  • 1877

简单的CardLayout布局案例

代码如下:   package www.csdn.net.bj; import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Container; import java.awt.even...
  • redarmy_chen
  • redarmy_chen
  • 2014-05-07 10:04
  • 9854

Java - swing - 图形界面间的切换( CardLayout )

实现图形界面的切换,可以通过CardLayout,实现面板的切换实现界面的切换。 首先介绍一下CardLayout CardLayout 对象是容器的布局管理器。它将容器中的每个组件看作一张卡片。一次只能看到一张卡片,容器则充当卡片的堆栈。当容器第一次显示时,第一个添加到 CardLayo...
  • qq_34594236
  • qq_34594236
  • 2016-12-21 15:57
  • 4754

CardCiew卡片式布局使用方法

卡片式布局使用起来非常简单,首先在bulid.gradle文件中加入这么一句话compile 'com.android.support:cardview-v7:21.+', 然后就可以当做是其他控件来在你的xml文件中配置使用了 强调一点,一定是support.v7包下的card...
  • xieluoxixi
  • xieluoxixi
  • 2016-10-20 09:16
  • 479

Swing超基础学习总结——4、CardLayout与ActionListener

使用CardLayout制作切换卡 案例代码 CardLayout详细说明 切换卡主要方法 ActionListener详细说明 使用方法 案例代码统计点击次数使用CardLayout制作切换卡案例代码:public class CardLayoutAndListenerTest { /** ...
  • zhengyikuangge
  • zhengyikuangge
  • 2016-08-28 16:01
  • 672
    个人资料
    • 访问:258165次
    • 积分:4158
    • 等级:
    • 排名:第8784名
    • 原创:194篇
    • 转载:15篇
    • 译文:0篇
    • 评论:60条
    文章分类
    最新评论