当前位置: 首页 > 知识库问答 >
问题:

Swing CardLayout运行时错误

督冠玉
2023-03-14

这个程序应该在一个JFrame中添加两个面板,每个面板都有一个开关按钮,允许用户在每个面板之间切换。它编译得很好,但是当我试图单击Switch1按钮时,我得到了这个错误:

java线程“AWT-EventQueue-0”中出现异常。ClassCastException:java。awt。无法将BorderLayout转换为java。awt。测试仪上的卡片布局。在javax上执行的操作(tester.java:36)。摆动抽象按钮。fireActionPerformed(未知源代码)在javax上执行。摆动AbstractButton$Handler。在javax上执行的操作(未知源)。摆动DefaultButtonModel。fireActionPerformed(未知源代码)在javax上执行。摆动DefaultButtonModel。setPressed(未知源代码)位于javax。摆动普拉夫。基本的基本按钮列表。java上的MouseRelease(未知源代码)。awt。组成部分javax上的processMouseEvent(未知源代码)。摆动JComponent。java上的ProcessMouseeEvent(未知源代码)。awt。组成部分java上的processEvent(未知源)。awt。容器java上的processEvent(未知源)。awt。组成部分java上的dispatchEventImpl(未知源代码)。awt。容器java上的dispatchEventImpl(未知源代码)。awt。组成部分java上的dispatchEvent(未知源)。awt。轻量级调度员。java上的retargetMouseEvent(未知源代码)。awt。轻量级调度员。java上的ProcessMouseeEvent(未知源代码)。awt。轻量级调度员。java上的dispatchEvent(未知源)。awt。容器java上的dispatchEventImpl(未知源代码)。awt。窗java上的dispatchEventImpl(未知源代码)。awt。组成部分java上的dispatchEvent(未知源)。awt。事件队列。java上的dispatchEventImpl(未知源代码)。awt。事件队列。在java上访问200美元(未知来源)。awt。事件队列3美元。在java上运行(未知源代码)。awt。事件队列3美元。在java上运行(未知源代码)。安全访问控制器。java上的doPrivileged(本机方法)。安全ProtectionDomain 1美元。java上的doIntersectionPrivilege(未知源代码)。安全ProtectionDomain 1美元。java上的doIntersectionPrivilege(未知源代码)。awt。事件队列4美元。在java上运行(未知源代码)。awt。事件队列4美元。在java上运行(未知源代码)。安全访问控制器。java上的doPrivileged(本机方法)。安全ProtectionDomain 1美元。java上的doIntersectionPrivilege(未知源代码)。awt。事件队列。java上的dispatchEvent(未知源)。awt。EventDispatchThread。java上的pumpOneEventForFilters(未知源代码)。awt。EventDispatchThread。java上的pumpEventsForFilter(未知源代码)。awt。EventDispatchThread。java上的pumpEventsForHierarchy(未知源代码)。awt。EventDispatchThread。java上的pumpEvents(未知源)。awt。EventDispatchThread。java上的pumpEvents(未知源)。awt。EventDispatchThread。运行(未知源)

我已经将JFrame布局设置为CardLayout,所以当我使用this.getLayout()时,它应该返回一个CardLayout对象。这是程序:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class tester extends JFrame implements ActionListener
{
    CardLayout cc = new CardLayout();
    JLabel text1 = new JLabel("Panel 1");
        JLabel text2 = new JLabel("Panel 2");
    JPanel panel1 = new JPanel();
    JPanel panel2 = new JPanel();
    JButton switch1 = new JButton("Switch1");
    JButton switch2 = new JButton("Switch2");
    boolean panel = true;

    public tester()
    { 
        setSize(100, 100);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(cc);
        switch1.addActionListener(this);
        switch2.addActionListener(this);
        panel1.add(switch1);
        panel1.add(text1);
        panel2.add(switch2);
        panel2.add(text2);
        add(panel1, "Panel 1");
        add(panel2, "Panel 2");
        setVisible(true);
    }

    public void actionPerformed(ActionEvent evt)
    {
        if(panel)
        {
            CardLayout pane = (CardLayout)this.getLayout();
            pane.last(this);
            panel = false;
        }
        else
        {
            CardLayout pane = (CardLayout)this.getLayout();
            pane.first(this);
            panel = true;
        }
        repaint();
    }

    public static void main(String[] args)
    {
        tester test = new tester();
    }
}

共有1个答案

穆华彩
2023-03-14

快速修复方法是直接引用卡片布局和内容窗格。维兹。

public void actionPerformed(ActionEvent evt)
{
    if(panel)
    {
        //CardLayout pane = (CardLayout)this.getLayout();
        cc.last(this.getContentPane());
        panel = false;
    }
    else
    {
        //CardLayout pane = (CardLayout)this.getLayout();
        cc.first(this.getContentPane());
        panel = true;
    }
    //repaint(); not necessary either..
}

更好的解决方法是在JPanel中设计GUI(并在其中使用CardLayout),并简单地创建一个JFrame的实例来显示面板(而不是扩展框架)。

 类似资料:
  • 问题内容: 我是mysql和jdbc的新手,但出现此标题错误。我整天都在搜索,找不到适合我的解决方案。 我尝试过的操作:卸载/重新安装mysql,将mysql-connector- java-5.1.25-bin.jar和ojdbc7.jar复制粘贴到与我要运行的.class文件相同的位置,然后将该程序重建在其他目录中,可能还有其他几件事。 我正在使用notepad ++进行编码,并使用Windo

  • 我正在尝试仅使用本地依赖项编译和运行java grpc客户端,但出现以下错误: 这是我的gradle文件: 程序将编译,但不运行。我已经从protos生成了我的java文件,并验证了我是否使用了正确的protoc和protoc gen grpc java与我正在使用的jar库相对应。非常感谢您的帮助。

  • 我收到一个奇怪的错误。在我初始化总数的线上。如果你有空闲时间帮我,我不明白; 第10行:Char 24:运行时错误:-inf超出了“int”(solution.cpp)类型的可表示值的范围摘要:UndefinedBehaviorSanitizer:undefined behavior prog_joined。cpp:19:24

  • 我在上面有一个问题:我使用了提供的答案,但仍然击中了一个对象错误。你能看到我错过了什么吗?我在“cash_sheet.range(”C8“).pastespecial xlpastevalues”处找到了错误

  • 我试图插入到一个MySQL数据库,代码工作和插入,但立即崩溃,看不出问题。 Applications.loginandRegister e/AndroidRuntime:致命异常:主进程:Applications.loginandRegister,PID:2545 Android.view.WindowManager$BadTokenException:无法添加窗口--令牌Android.os.B