Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从JFrame的中心元素显示不同的页面(已设置为BorderLayout) CentreFrameController_Java_Swing_Layout Manager - Fatal编程技术网

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

Java 如何从JFrame的中心元素显示不同的页面(已设置为BorderLayout) CentreFrameController,java,swing,layout-manager,Java,Swing,Layout Manager,守则这部分的目的是: 我想让GuiController框架在所有页面上都具有我的应用程序的一些通用样式(不管任何活动) GuiController框架将BorderLayout的中心元素样式提供给CentreFrameController面板 现在,CentreFrameController应该在听到LoginListener后切换页面。但是在这里,当它听到来自LoginListener的消息时,它并没有将CustomerPage添加到它的布局中(请注意,这里,CustomerPage类是为了扩

守则这部分的目的是:

  • 我想让
    GuiController
    框架在所有页面上都具有我的应用程序的一些通用样式(不管任何活动)
  • GuiController
    框架将
    BorderLayout
    的中心元素样式提供给
    CentreFrameController
    面板
  • 现在,
    CentreFrameController
    应该在听到
    LoginListener
    后切换页面。但是在这里,当它听到来自
    LoginListener
    的消息时,它并没有将
    CustomerPage
    添加到它的布局中(请注意,这里,
    CustomerPage
    类是为了扩展
    JPanel
    ,我没有上传它,因为它不是真正需要的)
  • 下面是一个演示如何使用Andrew Thompson建议的
    CardLayout

    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
        }
    }
    
    您可以使用
    carddlayout
    控制显示哪张卡


    以下是一个演示如何使用Andrew Thompson建议的
    CardLayout

    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
        }
    }
    
    您可以使用
    carddlayout
    控制显示哪张卡



    “请在我的代码中做出适当的更改以回复…”因此这不是一项编码服务。2)“我没有上传,因为它不是真正必要的”为了更快地获得更好的帮助,请发布或。3) “如何显示与JFrame的中心元素不同的页面”使用如中所示的。将其设置为添加到
    边界布局
    中心
    约束的面板。4) 请对代码和代码片段、结构化文档(如HTML/XML或输入/输出)使用代码格式。。。。要做到这一点,请选择文本并单击邮件发布/编辑表单顶部的
    {}
    按钮。@AndrewThompson你把我搞错了。.在中,我看到了很多答案,告诉我应该更改代码的哪一部分…所以我说“告诉代码的哪一部分应该更改”,这与“在我的代码中进行适当的更改”。“请通过在我的代码中进行适当的更改来回复…”这不是一项编码服务。2)“我没有上传,因为它不是真正必要的”为了更快地获得更好的帮助,发布一个或。3)“如何显示与JFrame中心元素不同的页面“使用如中所示的。将其设置为添加到
    边界布局
    中心
    约束的面板。4) 请对代码和代码片段、结构化文档(如HTML/XML或输入/输出)使用代码格式。。。。要做到这一点,请选择文本并单击邮件发布/编辑表单顶部的
    {}
    按钮。@AndrewThompson你把我搞错了。.在中,我看到了很多答案,告诉我应该更改代码的哪一部分…所以我说“告诉代码的哪一部分应该更改”,这与“在我的代码中进行适当的更改”。非常感谢,非常感谢
    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);
        }
    }