CardLayout 显示下一个面板 - java Swing [英] CardLayout display Next panel - java Swing

查看:34
本文介绍了CardLayout 显示下一个面板 - java Swing的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在使用 CardLayout 时遇到了一些问题.我有一个面板和一个下一步按钮.单击它后,我想显示第二个面板.在我的代码中,当我单击下一步"按钮时,不显示下一个面板.有人可以帮我解决这个问题吗?

I am having some problem with CardLayout. I have a panel and a Next button on it. upon clicking on it i want to display the 2nd panel. In my code, when i click on the Next buton, the next panel is not displayed. Can someone help me solve this ?

package com.test;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.CardLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class CardLay extends JFrame {

    private JPanel contentPane;
    private CardLayout ca;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    CardLay frame = new CardLay();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public CardLay() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        ca =new CardLayout(0, 0);

        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(ca);

        JPanel panel = new JPanel();
        panel.setLayout(null);

        contentPane.add("1",panel);

        JButton btnNext = new JButton("NEXT");
        btnNext.setBounds(131, 93, 117, 29);
        btnNext.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                ca.show(contentPane,"1");
                System.out.println("button clicked");
            }
        });
        panel.add(btnNext);


        JPanel panel_1 = new JPanel();
        contentPane.add(panel_1, "name_1353086933711396000");

        JCheckBox chckbxNewCheckBox = new JCheckBox("New check box");
        panel_1.add(chckbxNewCheckBox);
    }

}

推荐答案

您需要致电:

ca.show(contentPane, "name_1353086933711396000");

为此,您必须像这样添加第二个面板:

For this to work you will have to add the second panel like this:

contentPane.add("name_1353086933711396000", panel_1);

在使用 CardLayout 时,请确保将导航按钮放在一个单独的容器上,而不是卡片"本身,以便它们在整个导航过程中可见.在这里,您可以在框架的 BorderLayout.SOUTH 位置放置一个新的导航容器.对于顺序导航,方法 之前下一步 可用.

When using CardLayout make sure to keep navigation buttons on a separate container other then the 'cards' themselves, so that they can be visible throughout the navigation process. Here you could place a new navigation container in the frame's BorderLayout.SOUTH position. For sequential navigation, the methods previous and next are available.

还要避免使用绝对定位(null 布局).请参阅无需布局管理器(绝对定位).>

Also avoid using absolute positioning (null layout). See Doing Without a Layout Manager (Absolute Positioning).

public CardLay() {
   setDefaultCloseOperation(EXIT_ON_CLOSE);
   setSize(500, 400);

   ca = new CardLayout(0, 0);

   contentPane = new JPanel();
   contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
   contentPane.setLayout(ca);

   JPanel panel1 = new JPanel();
   panel1.add(new JButton("Test Button"));
   contentPane.add("card1", panel1);

   JPanel panel2 = new JPanel();
   contentPane.add("card2", panel2);
   JCheckBox chckbxNewCheckBox = new JCheckBox("New check box");
   panel2.add(chckbxNewCheckBox);

   JPanel navigationPanel = new JPanel();

   JButton btnPrevious = new JButton("< PREVIOUS");
   btnPrevious.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        ca.previous(contentPane);
    }
   });
   navigationPanel.add(btnPrevious);

   JButton btnNext = new JButton("NEXT >");
   btnNext.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
      ca.next(contentPane);
    }
   });
   navigationPanel.add(btnNext);

   add(contentPane);
   add(navigationPanel, BorderLayout.SOUTH);
}

推荐: 如何使用 CardLayout

这篇关于CardLayout 显示下一个面板 - java Swing的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆