Java 将JPanel放在JFrame内

Java 将JPanel放在JFrame内,java,swing,Java,Swing,我已经做了好几个小时了,我很难受。我有这段代码,它在JFrame中添加了一个JPanel,问题是当我将Frame设置为Free Design时,它不会显示在框架中。当我将框架设置为边框布局时,代码工作正常。我想做的是让它与免费设计一起工作,在那里我可以随意放置和调整JPanel的大小。下面是将其放置在框架中的代码 canvas = new Canvas(); canvas.setVisible(true); canvas.setImage(file

我已经做了好几个小时了,我很难受。我有这段代码,它在JFrame中添加了一个JPanel,问题是当我将Frame设置为
Free Design
时,它不会显示在框架中。当我将框架设置为
边框布局
时,代码工作正常。我想做的是让它与
免费设计
一起工作,在那里我可以随意放置和调整JPanel的大小。下面是将其放置在框架中的代码

        canvas = new Canvas();
        canvas.setVisible(true);
        canvas.setImage(file);
        GroupLayout canvasLayout = new GroupLayout(canvas);
        canvas.setLayout(canvasLayout);
        canvas.setPreferredSize(new Dimension(100, 100));
        //canvas.setSize(200,200);
        //canvas.setPreferredSize(null);
        add(canvas);
        revalidate();
当我使用自由设计模式时,我遗漏了什么?以下是构建布局的代码:

private void initComponents() {

    jInternalFrame1 = new javax.swing.JInternalFrame();

    jInternalFrame1.setVisible(true);

    javax.swing.GroupLayout jInternalFrame1Layout = new javax.swing.GroupLayout(jInternalFrame1.getContentPane());
    jInternalFrame1.getContentPane().setLayout(jInternalFrame1Layout);
    jInternalFrame1Layout.setHorizontalGroup(
        jInternalFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 0, Short.MAX_VALUE)
    );
    jInternalFrame1Layout.setVerticalGroup(
        jInternalFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 0, Short.MAX_VALUE)
    );

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    setTitle("PocketShop");
    setName("main");

    pack();
}

取消JInternalFrame

JInternalFrame适用于JDesktopPane内的儿童。windows中的一种窗口,即所谓的MDI,多文档界面,而不是SDI,单文档界面

使用JPanel而不是Canvas

Canvas是旧的本地平台AWT(一个组件)和Swing(一个JComponent)的JPanel。 您可以在那里覆盖该组件

对于自由设计布局,我将使用NetBeans IDE中的GUI编辑器。我知道,所以不能再帮你了

如果可能,不要使用重新验证



如果手动添加画布,请尝试添加JPanel,并将其设置为自定义创建代码
newcanvas()
Canvas

画布是我的自定义类,它扩展了JPanel。第二部分代码是由我的编辑器用Netbeans GUI Builder构建的,它不允许我对其进行更改。在这种情况下,看起来您仍在构建GUI,然后重新验证至少是多余的。不幸的是,JInternalFrame不是错误。JInternalFrame添加到JDesktopPane中有点不规则:容易出错。我将补充回答。您需要向组布局管理器提供约束,以便它知道您希望在何处以及如何布置组件。请看一看-注意,
GroupLayout
旨在供表单设计者使用,而不是用于手工编码;)