Java,从另一个类添加到jpanel到jframe

Java,从另一个类添加到jpanel到jframe,java,swing,Java,Swing,我有两个类,如下所示: public class Board extends JFrame { private JFrame frame; public Board() { JFrame frame = new JFrame(); frame.add(this.createContentPane()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.s

我有两个类,如下所示:

public class Board extends JFrame {

private JFrame frame;

public Board() {
    JFrame frame = new JFrame();
    frame.add(this.createContentPane());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
}

public JPanel createContentPane (){
    
    JPanel totalGUI = new JPanel();
    JPanel mainPanel = new JPanel(new GridLayout(3, 3));

    JPanel red = createSquareJPanel(Color.red, 50);
    JPanel blue = createSquareJPanel(Color.blue, 50);
  
    mainPanel.add(red);
    mainPanel.add(blue);

    totalGUI.add(mainPanel);
    totalGUI.setOpaque(true);
    return totalGUI;
}

private JPanel createSquareJPanel(Color color, int size)
{
    Rectangle rect = new Rectangle(color, size);
    return rect;
}
}

public class Rectangle extends JPanel {

    public Rectangle(Color color, int size) {
        this.setBackground(color);
        this.setMinimumSize(new Dimension(size, size));
        this.setMaximumSize(new Dimension(size, size));
        this.setPreferredSize(new Dimension(size, size));

    }
}
问题在于,当方法“createSquareJPanel”创建矩形对象时,gridlayout中只有2的第一个元素出现。所以我只看到红色的矩形


如果我将矩形类中的代码放在createSquareJPanel中,并在这里创建一个JPanel,那么它将按照预期工作。我不明白为什么此代码只显示一个元素。

您的代码对我来说很好。我已经重新编写了测试,但它是一个相当克隆

此外,类矩形不应该在董事会文件,但我想你,但它在这里的职位。我想知道为什么这个类在扩展JFrame的同时还具有JFrame属性。顺便说一句,那些是正方形的,对吗


我想让你看到totalGUI几乎也是无用的,你可以使用默认的contentPane或你创建的mainPanel,它可以单独工作。默认布局为FlowLayout的事实。

1)不要扩展JFrame。Board类不需要扩展任何对象。2) 不要将该类称为矩形。JDK中已经有一个同名的类,所以它很容易混淆。3). 代码在make中运行良好。进行上述更改并从项目中删除所有类文件,以确保没有任何旧文件。1)和2)未更改任何内容。我不确定如何从我的项目中删除所有类文件。如何从计算机上的目录中删除任何文件?好的,我试过了。不幸的是,这并没有改变任何事情。getX()和getY()方法是在组件类中定义的。通过重写这些方法,您将失去默认行为。这是你从经验中学到的东西。我以前做过。JPanel默认是不透明的。不需要调用set不透明(…)方法。不要在github上发布代码。只需在论坛中发布代码供大家查看。我已经测试了JPanel的默认不透明度,你是对的,默认情况下它是不透明的。我一定把杰拉贝尔弄糊涂了。我已经改变了我对avoir误导的回答。我将两者都做,但重点是显示代码。我发现了我的问题,谢谢你的帮助。我不明白为什么,但我在矩形中有一个函数,我认为它无关紧要,但当我删除它时,一切都正常,如下所示:public int getY(){return Y_COORDINATE;},当我将它改为另一个名称时,它似乎是一个名为“getY”的东西,一切正常