如何从 JFrame 的中心元素显示不同的页面(已设置为 BorderLayout)

2023-12-05

import java.awt.BorderLayout;
import java.awt.Component;  
import javax.swing.JFrame;
import javax.swing.border.Border;

public class GuiController extends JFrame {

    private CentreFrameController centreFrameController;
    private CustomerPage customerPage;
    private LoginPage loginPage;
    public GuiController(){
        centreFrameController=new CentreFrameController(this);      
        setLayout(new BorderLayout());      

        add(centreFrameController,BorderLayout.CENTER);     

        setTitle("Courier System-Login Page");
        setVisible(true);
        setSize(550,650);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }   
}

CentreFrameController

import java.awt.BorderLayout;
import java.awt.Graphics; 
import javax.swing.JPanel;

public class CentreFrameController extends JPanel {

    private GuiController guiController;
    private CustomerPage customerPage;
    private LoginPage loginPage;
    public CentreFrameController(GuiController guiController){
        this.guiController=guiController;
        loginPage=new LoginPage(this);
        setLayout(new BorderLayout());

        add(loginPage,BorderLayout.CENTER);
        loginPage.addLoginPageListener(new LoginPageListener(){
            public void getLoginPageReply(int reply) {
                switch(reply){
                case 0:System.out.println("Customer login sucess");
                setCustomerHomePage();
                break;
                case 1:System.out.println("Admin login success");
                }
            }
        });
    }
    public void setCustomerHomePage(){
        customerPage=new CustomerPage(this,loginPage);
        add(customerPage,BorderLayout.CENTER);///This is the part which is not working
    }
}

这部分代码的目的是:

  1. 我想做GuiController框架在所有页面上都有一些适用于我的应用程序的通用样式(无论任何活动)
  2. The GuiController框架给出了中心元素样式BorderLayout to the CentreFrameController panel
  3. Now the CentreFrameController应该在收到消息后切换页面LoginListener。但在这里,当它听到LoginListener,它没有添加CustomerPage到它的布局(请注意,这里,CustomerPage类被扩展JPanel我还没有上传它,因为它并不是真正必要的)。

这里有一个mcve演示如何使用CardLayout正如安德鲁·汤普森所建议的:

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class GuiController extends JFrame {

    private boolean isRedShowing;

    public GuiController(){

        setTitle("CardLayout Demo");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        CentreFrameController centreFrameController = new CentreFrameController();
        centreFrameController.showRedPane();
        isRedShowing = true;
        setLayout(new BorderLayout());
        add(centreFrameController,BorderLayout.CENTER);
        JButton toggle = new JButton("Toggle");
        toggle.addActionListener(e ->{
            if(! isRedShowing) {
                centreFrameController.showRedPane();
            } else {
                centreFrameController.showYelloPane();
            }
            isRedShowing = ! isRedShowing;
        });
        add(toggle,BorderLayout.PAGE_END);
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        new GuiController();
    }
}

class CentreFrameController extends JPanel {

    public final String YELLOW_PAGE = "yellow page";
    public final String RED_PAGE = "red page";
    private final CardLayout cLayout;

    public CentreFrameController(){

        cLayout = new CardLayout();
        setLayout(cLayout);
        setPreferredSize(new Dimension(200, 150));
        add(YELLOW_PAGE, new YellowPane());
        add(RED_PAGE, new RedPane());
    }

    //two convenience methods that encapsulate CardLayout#show(Container, String)
    void showRedPane() {
        cLayout.show(this, RED_PAGE);
    }

    void showYelloPane() {
        cLayout.show(this, YELLOW_PAGE);
    }
}

class RedPane extends JPanel{

    RedPane(){
        setBackground(Color.RED);
    }
}

class YellowPane extends JPanel{

    YellowPane(){
        setBackground(Color.YELLOW);
    }
}

您可以使用以下命令控制显示哪张卡CarrdLayout show.


enter image description here

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

如何从 JFrame 的中心元素显示不同的页面(已设置为 BorderLayout) 的相关文章

随机推荐

  • Python 对象的良好风格

    在使用 Python 之前 我的大部分编程都是使用 C 或 Matlab 进行的 我没有计算机科学学位 几乎完成了物理学博士学位 但已经完成了一些课程和大量的实际编程 现在 我正在 Coursera 上学习算法课程 顺便说一句 由斯坦福大学
  • 如何设置App Maker数据源中的当前项目?

    这看起来很基本 但我似乎无法弄清楚如何手动设置当前项目以从数据源使用 举例来说 我有一个表 我注意到当我选择一行来编辑字段时 该行的项目将成为当前项目 因此如果我在该行上有一个链接以导航到页面 则该行的行所选项目将是导航页面的 dataso
  • 按组移动窗口计数不同项

    假设我有一个包含医院就诊的数据集 我的目标是生成一个变量 用于计算访问者在访问日期之前见过的唯一患者的数量 我经常使用 dplyr 的 group by 但这似乎有点棘手 我想我必须使用 group by n distinct 和 sum
  • Python 连接不显示 Swagger UI

    我使用 connexion 模块构建了一个基于 Python Flask 的 REST API 这与使用 swagger yml 文件定义 REST API 一样效果很好 该应用程序正在运行 但是当我导航到
  • eigen 是否有像 H.transpose()*H 这样的自转置乘法优化

    我浏览过 eigen 的教程https eigen tuxfamily org dox devel group TutorialMatrixArithmetic html 它说 注意 对于担心性能的 BLAS 用户 c noalias 2
  • 容器视图控制器示例[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 谁能给我指出创建自定义视图控制器作为容器视图控制器的任何好例子 我能找到的唯一文档是UIViewController 类参考 我觉得我需要更多的信息
  • Xcode 中的 Objective-C 类似 JavaDoc 文档? [复制]

    这个问题在这里已经有答案了 可能的重复 Objective C 中的文档如何做 是否可以在 Objective C 中以 Xcode 4 在快速帮助中显示它们的方式编写类 方法文档 和 或以 Apple 自己的文档风格从中生成文档文档 现场
  • 如何在 Swift 中创建类数组

    我创建了两个类 StepsCell 和 WeightCell import UIKit class StepsCell let name Steps let count 2000 import UIKit class WeightCell
  • 内联 WSDL 而不是 wsdl:import

    目前我的 WSDL WebService带注释的类创建一个描述类的外部 wsdl 它通过以下方式做到这一点
  • 仅在悬停时过渡

    我有这个 hello opacity 0 transition all 220ms ease 0s hello hover opacity 1 我希望过渡效果仅在用户时可见hover in 而不是当它们悬停时 那可能吗 在本例中将过渡添加到
  • 如何在 PHP 中向 div 添加效果“隐藏(“慢”)”

    我有一个在 PHP 中名为 formscontainer 的 div 中重复多次的表单 同时 我想让表单提交时各自的 div 消失 效果隐藏 慢 这是示例代码
  • 使用特殊字符对数组进行排序 - iPhone

    我有一个带有法语字符串的数组 可以说 grener 和 exact 我想对其进行排序 例如 grener 是第一个 当我做 NSSortDescriptor descriptor NSSortDescriptor alloc initWit
  • 将项目添加到 IRfcTable

    我有一个函数 它的参数之一是一个表 T ITEMS 表项的类型 结构为 Z ITEM 具有两个字段 值 数量 如何向此表添加 Z ITEM 类型的项目 我所做的是以下代码 IRfcFunction fnct repo CreateFunct
  • C++ 最常用的 XML 库是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我通过谷歌快速搜索看到了一些图书馆 C 最常用的 XML 实现是什么 我计划使用 XML 作为程序配置的方式 我喜欢 XML 因为我将利用它的树状结
  • 从无任务上下文同步访问参与者属性

    整合actors使用现有代码似乎并不像苹果希望你相信的那么简单 考虑以下简单的参与者 actor Foo var value Int 0 尝试从任何地方访问此属性AppKit UIKit 无任务 控制器无法工作 因为每个Task是异步的 c
  • 实现生产者消费者模式

    我正在尝试编写一个邮件实用程序 将邮件放入队列中 然后由消费者线程使用 我正在尝试实现典型的生产者 消费者模式 但出了问题 我刚刚写了一个骨架 但该骨架没有按预期工作 MailProducer java public class MailP
  • Java 与多个对象/锁的同步

    我想知道是否有一个包或模型可以帮助我解决这种情况 假设我有 3 个线程和一堆对象 A B C D E F T1需要锁A B T2需要锁B C D T3需要锁E F 在这种情况下 如果 T1 和 T3 同时运行就可以了 此外 T2 和 T3
  • 通过使用 shell 脚本替换文件名中的特定模式来重命名多个文件[重复]

    这个问题在这里已经有答案了 编写一个简单的脚本来自动重命名许多文件 例如 我们希望将文件 001 jpg 重命名为用户定义的字符串 001 jpg 例如 MyVacation20110725 001 jpg 该脚本的用途是让数码相机照片具有
  • 不要等待页面加载

    我的问题是 我必须从中获取数据的站点加载花费了太多时间 这增加了测试用例的执行时间 我不想等待整个网站加载 我能做些什么 我使用了 30 秒的超时 但即使超过时间也不会引发异常 可能所有的javascript都是在网页的onload事件中调
  • 如何从 JFrame 的中心元素显示不同的页面(已设置为 BorderLayout)

    import java awt BorderLayout import java awt Component import javax swing JFrame import javax swing border Border public