CardLayout 显示下一个面板 - java Swing

2024-01-17

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

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");

为此,您必须添加第二个面板,如下所示:

contentPane.add("name_1353086933711396000", panel_1);

使用时CardLayout确保将导航按钮保留在“卡片”本身之外的单独容器上,以便它们在整个导航过程中可见。在这里,您可以在框架中放置一个新的导航容器BorderLayout.SOUTH位置。对于顺序导航,方法previous http://docs.oracle.com/javase/7/docs/api/java/awt/CardLayout.html#previous%28java.awt.Container%29 and next http://docs.oracle.com/javase/7/docs/api/java/awt/CardLayout.html#next%28java.awt.Container%29可用。

还要避免使用绝对定位(null布局)。看不使用布局管理器(绝对定位) http://docs.oracle.com/javase/tutorial/uiswing/layout/none.html.

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

受到推崇的: 如何使用卡片布局 http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CardLayout 显示下一个面板 - java Swing 的相关文章

随机推荐

  • 创建 iPhone 通用二进制文件时如何测试常量是否存在

    我正在尝试创建一个通用二进制文件 它支持 iPhone 4 上的多任务处理 并且仍然可以在 iPad 上运行 我知道如何通过使用 NSClassFromString 和 respondToSelector 检查类是否存在来避免不同版本的 i
  • 在 App Hub 之外销售 Windows Phone 7 应用程序

    是否可以在 Microsoft App Hub 之外 合法 销售 WP7 应用程序 这有许可证限制吗 以这种方式进行应用程序分发是否理想 即 WP7 用户是否可以轻松访问其他站点 服务来查找新应用程序 严格来说 我不知道有任何限制来防止在市
  • Latex:以罗马数字打印变量

    我正在 LaTeX 中排版 我想用罗马语而不是默认的阿拉伯语显示一个 变量 在我的例子中 是对列表中项目编号的引用 ref blah 是否有捷径可寻 感谢您的指点 你可以试试 def theenumi roman enumi 里面一个enu
  • 为什么不以同样的方式处理所有这些变量?

    我正在检查 VB NET 中变量声明的位置并不重要 除了范围之外 对于这个问题 https stackoverflow com q 13259999 256431 我想我最好检查一下当它们被 提升 到闭包时会发生什么 我还没有阅读规范 但我
  • 如何使用宏获取 Word 文档的当前文件名(不带扩展名或完整路径)?

    我有代码可以提取文件的完整路径 减去扩展名 并且我正在尝试将其修改为仅存储文件名 再次不包含扩展名 Sub ShowFilename Dim pathName As String With ActiveDocument If Len Pat
  • 运行 .msi 安装程序后能否确定生成的命令行?

    如果我想要静默安装 是否有任何简单的方法来运行安装程序 选择所需的选项 然后确定等效安装所需的 msiexec 选项 开关 最好没有实际安装任何东西 不要点击 完成 或者您可以通过挖掘 MSI 数据库来找到所需的属性吗 是的 听起来您需要创
  • 如何保证VirtualAlloc分配的虚拟内存地址在2-4GB之间

    我尝试使用while 但是效果不是很好 有什么办法可以做到吗 bool found false uintptr t memaddr 0 int n 0 while found n lt 10 n 1 memaddr uintptr t Vi
  • 使用 AWS Glue ETL 将多个 parquet 文件合并到 AWS S3 中的单个 parquet 文件 python Spark (pyspark)

    我每 15 分钟运行一次 AWS Glue ETL 作业 每次在 S3 中生成 1 个 parquet 文件 我需要创建另一个作业以在每小时结束时运行 以使用 AWS Glue ETL pyspark 代码将 S3 中的所有 4 个 par
  • COM 与 .NET 6 互操作

    我们有一个用 C 编写的 NET 类库 我们正在尝试将其从 NET Framework v2 0 升级到 NET 6 在 NET 2 0 中 该库通过导入该库的 TLB 的 C 代码进行实例化 使用 为了使用 COM 使用 NET 6 库
  • HTML:更改

    的高度

    如何指定插入空行的高度 p 创造 在您的样式表或样式表部分中 定义以下内容 示例 p margin top 0 6em margin bottom 0em 您也可以在单独的标签中指定它 p p style margin top p
  • 由于“Binder 线程池”,应用程序未在模拟器上运行

    我正在尝试在模拟器上打开应用程序 但无法 在 Logcat 上我得到了这个 10 07 00 23 49 443 1268 1268 E hwservicemanager BINDER SET INHERIT FIFO PRIO faile
  • 如何将这个十六进制字符串转换为长字符串?

    我有 0xE94C827CEB 十六进制但作为字符串 即 1002011000043 dd mm yyyy HH mm ss 不幸的是 如果我只有字符串格式 我不知道如何进行转换 并且我没有 Convert ToLong 0xE94C827
  • usemin revved 文件名和 requirejs 依赖项

    我在 requirejs 和 usemin 中遇到以下问题 我想设置一个多页面应用程序 在其中动态加载仅包含页面特定功能的模块 例如 about gt about js home gt home js 我可以继续将所有内容打包在一个文件中
  • 带有名为“PropertiesController”的控制器的 ASP.NET MVC 路由[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我在尝试使用名称为 PropertiesController 的控制器 以及随后的路由 时遇到了一个棘手的问题 请耐心等
  • 如何从命令行运行 R 脚本文件

    我知道关于这个问题有很多问题 但我已经尝试了一切 我想我只是不明白命令行在 Windows 中是如何工作的 我的桌面上的文件夹中保存了一个文件 比方说 C Users abika 000 Desktop R models myfile R
  • urwid - 无限循环的输出屏幕

    我正在尝试制作一个简单的 urwid 作为无限循环的输出屏幕 它需要输出来自另一个类的数据 我现在找到的解决方案是 有一个 Printer 类 实际输出类的测试替换器 和queue属性 当需要显示某些内容时 会将其附加到queue 然后 有
  • 删除索引后是否应该重新编译表?

    我正在删除一些未使用的索引 我通常做的是 确保统计信息已更新 也许索引尚未使用 因为统计信息已经有一段时间没有更新了 为每个涉及的索引生成删除索引脚本和创建索引脚本 运行删除索引命令 update statistics tablename
  • Python VS Code 导入不起作用“无模块名称请求”

    我是 python 新手 刚学了 6 个月的 c 也是 VS Code 来自 VS 的新手 我的错误是 gt 发生异常 ModuleNotFoundError 没有名为 requests 的模块 文件 C Users ryanb Docum
  • Swift 中的 AES128 加密

    我对 AES 128 加密有疑问 iOS 中的加密字符串与 Android 中的加密字符串不同 下面是安卓代码 public class Encryption private static final String ALGORITHM AE
  • CardLayout 显示下一个面板 - java Swing

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