为JAVA/SWING应用程序创建主窗口

为JAVA/SWING应用程序创建主窗口,java,swing,mainwindow,Java,Swing,Mainwindow,当我开始开发我的应用程序时,我只是开发了Seprate JFrame框架并对它们逐一进行测试。现在,我想为我的应用程序创建一个主窗口。我读了很多书,但直到现在,我还是很难用java和swing来完成这项工作。我尝试通过创建一个主窗口作为JFrame的实例来实现这一点,但出现的错误表明我无法在另一个JFrame中显示JFrame public class MainWindow extends JFrame{ private JFrame frame1; private JFrame frame2;

当我开始开发我的应用程序时,我只是开发了Seprate JFrame框架并对它们逐一进行测试。现在,我想为我的应用程序创建一个主窗口。我读了很多书,但直到现在,我还是很难用java和swing来完成这项工作。我尝试通过创建一个主窗口作为JFrame的实例来实现这一点,但出现的错误表明我无法在另一个JFrame中显示JFrame

public class MainWindow extends JFrame{
private JFrame frame1;
private JFrame frame2;


public MainWindow(){

frame1 = new JFrame();
frame2 = new JFrame();

setLayout(new BorderLayout());

add(frame1,BorderLayout.CENTER);
add(frame2,BorderLayout.NORTH);

pack(); 

}

}

JFrame
是一个窗口

你不能把窗户放在窗户里面


您可能正在寻找
JPanel
JPanel
是其他组件的一个相当简单的容器(可以包含更多的
JPanel
s)。您可以将
JPanel
s添加到
JFrame
有不同的方法来处理此问题
首先,你不能像你所注意到的那样在Jframe内部使用Jframe,所以应该使用
JPanel

panel = new JPanel();

add(panel,BorderLayout.Center);
JPanel是另一个容器,您可以在其中打包许多swing组件

如果您想打开一个新窗口,请使用另一个JFrame并使其可见。注意,不能使用add方法将其添加到Jframe中。但您可以将其保存在变量中,并处理在同一类的另一个框架中看到的内容。
当您想要一个主窗口时,请将此代码添加到主窗口:

frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

这使得如果您关闭主框架,应用程序将结束(在其他框架中,您不应该正常实现此功能)

这就是为什么通常不建议直接从顶级容器(如
JFrame
)扩展的原因之一,它们将您锁定为单一用途

不能将基于窗口的组件添加到其他容器中。您必须将每个当前帧分离到一个更基本的容器中,如
JPanel
,然后才能将它们添加到另一个窗口

您可以考虑使用<代码>卡布局< /代码>或<代码> JTabEddiane<代码>,甚至使用<代码> JDekTopPane<代码>或其他布局管理器,以根据您的需要使您的个人视图可供用户使用。


要了解更多想法,我想在面板或父JFrame中添加entrie JFrame,我如何才能做到这一点?@abdouamer正如immibis所说,你不能。这就是为什么我们不鼓励人们从
JFrame
扩展,因为它将您锁定在一个实现中。相反,使用
JPanel
CardLayout
JTabedPane
(甚至其他布局管理器)来显示单独的视图。。。