Java 多帧
我正在用java制作一个处理客户订单的应用程序。 我的程序有3个JFrame窗口是的,我知道使用多个框架不是一个好主意,但它们之间并没有真正的连接 主要一点:在这里您可以选择您是客户还是运营商 客户JFrame 运算符JFrame 客户下订单后,主框架>客户框架>完成订单按钮。我正在做这样的事情:Java 多帧,java,swing,jframe,Java,Swing,Jframe,我正在用java制作一个处理客户订单的应用程序。 我的程序有3个JFrame窗口是的,我知道使用多个框架不是一个好主意,但它们之间并没有真正的连接 主要一点:在这里您可以选择您是客户还是运营商 客户JFrame 运算符JFrame 客户下订单后,主框架>客户框架>完成订单按钮。我正在做这样的事情: customerframe.dispose(); customerframe.revalidate(); customerframe.repaint(); reloadframe(); ///a me
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一起工作?这不是不可能的,只是不推荐。从长远来看,使用卡片布局会容易得多。您可以在操作侦听器中用一行代码切换视图。我已经读过了。我已经读过了。