Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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 多帧_Java_Swing_Jframe - Fatal编程技术网

Java 多帧

Java 多帧,java,swing,jframe,Java,Swing,Jframe,我正在用java制作一个处理客户订单的应用程序。 我的程序有3个JFrame窗口是的,我知道使用多个框架不是一个好主意,但它们之间并没有真正的连接 主要一点:在这里您可以选择您是客户还是运营商 客户JFrame 运算符JFrame 客户下订单后,主框架>客户框架>完成订单按钮。我正在做这样的事情: customerframe.dispose(); customerframe.revalidate(); customerframe.repaint(); reloadframe(); ///a me

我正在用java制作一个处理客户订单的应用程序。 我的程序有3个JFrame窗口是的,我知道使用多个框架不是一个好主意,但它们之间并没有真正的连接

主要一点:在这里您可以选择您是客户还是运营商 客户JFrame 运算符JFrame 客户下订单后,主框架>客户框架>完成订单按钮。我正在做这样的事情:

customerframe.dispose();
customerframe.revalidate();
customerframe.repaint();
reloadframe(); ///a method which reinitializes the frame (Note: I am doing a frame=new JFrame()  here)
mainframe.setVisible(true);
我再次选择customer,它会打开customerframe,但问题是监听器不再工作,我想它们会以某种方式保持与旧框架或其他东西的连接


我已经试着让它工作了几个小时了…

您不应该使用多个JFrames查看链接了解更多信息

相反,我建议您使用如下所示的:

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

public class MainFrame
{
    static JPanel homeContainer;
    static CardLayout cl;

    JPanel homePanel;
    JPanel otherPanel;


    public MainFrame()
    {
        JFrame mFrame = new JFrame("CardLayout Example");
        JButton showOtherPanelBtn = new JButton("Show Other Panel");
        JButton backToHomeBtn = new JButton("Show Home Panel");

        cl = new CardLayout(5, 5);
        homeContainer = new JPanel(cl);
        homeContainer.setBackground(Color.black);

        homePanel = new JPanel();
        homePanel.setBackground(Color.blue);
        homePanel.add(showOtherPanelBtn);

        homeContainer.add(homePanel, "Home");

        otherPanel = new JPanel();
        otherPanel.setBackground(Color.green);
        otherPanel.add(backToHomeBtn);

        homeContainer.add(otherPanel, "Other Panel");

        showOtherPanelBtn.addActionListener(e -> cl.show(homeContainer, "Other Panel"));
        backToHomeBtn.addActionListener(e -> cl.show(homeContainer, "Home"));

        mFrame.add(homeContainer);
        cl.show(homeContainer, "Home");
        mFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        mFrame.setLocationRelativeTo(null);
        mFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        mFrame.pack();
        mFrame.setVisible(true);
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(MainFrame::new);
    }
}

使用Cardlayout,您可以在JPanel之间切换。这样,您不必创建新的JFrame,只需显示新内容即可。基本上,您有某种容器,可以是JFrame,也可以是JPanel,然后,当您添加您创建的其他面板时,给它们一个名称。然后,您可以使用cardLayout.showcontainer,Name

您不应该使用多个JFrames查看链接了解更多信息

相反,我建议您使用如下所示的:

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

public class MainFrame
{
    static JPanel homeContainer;
    static CardLayout cl;

    JPanel homePanel;
    JPanel otherPanel;


    public MainFrame()
    {
        JFrame mFrame = new JFrame("CardLayout Example");
        JButton showOtherPanelBtn = new JButton("Show Other Panel");
        JButton backToHomeBtn = new JButton("Show Home Panel");

        cl = new CardLayout(5, 5);
        homeContainer = new JPanel(cl);
        homeContainer.setBackground(Color.black);

        homePanel = new JPanel();
        homePanel.setBackground(Color.blue);
        homePanel.add(showOtherPanelBtn);

        homeContainer.add(homePanel, "Home");

        otherPanel = new JPanel();
        otherPanel.setBackground(Color.green);
        otherPanel.add(backToHomeBtn);

        homeContainer.add(otherPanel, "Other Panel");

        showOtherPanelBtn.addActionListener(e -> cl.show(homeContainer, "Other Panel"));
        backToHomeBtn.addActionListener(e -> cl.show(homeContainer, "Home"));

        mFrame.add(homeContainer);
        cl.show(homeContainer, "Home");
        mFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        mFrame.setLocationRelativeTo(null);
        mFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        mFrame.pack();
        mFrame.setVisible(true);
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(MainFrame::new);
    }
}

使用Cardlayout,您可以在JPanel之间切换。这样,您不必创建新的JFrame,只需显示新内容即可。基本上,您有某种容器,可以是JFrame,也可以是JPanel,然后,当您添加您创建的其他面板时,给它们一个名称。然后,您可以使用cardLayout.showcontainer,Name

所以不可能让它与多个JFrame一起工作?这不是不可能的,只是不推荐。从长远来看,使用卡片布局会容易得多。您可以在动作侦听器中使用一行代码切换视图。因此,不可能使其与多个JFrame一起工作?这不是不可能的,只是不推荐。从长远来看,使用卡片布局会容易得多。您可以在操作侦听器中用一行代码切换视图。我已经读过了。我已经读过了。