Java 将JPanel对象添加到单独的JPanel中

Java 将JPanel对象添加到单独的JPanel中,java,swing,jpanel,Java,Swing,Jpanel,我正在处理一个菜单,我想使它尽可能面向对象,所以我为菜单JPanel对象创建了一个单独的类。问题是它不想将它添加到我的主JPanel中。我做错了什么?我应该如何修复它 主类: package StackOverflow; import java.awt.CardLayout; import javax.swing.*; public class Main { private JFrame frame = new JFrame(); private JPanel MainPan

我正在处理一个菜单,我想使它尽可能面向对象,所以我为菜单JPanel对象创建了一个单独的类。问题是它不想将它添加到我的主JPanel中。我做错了什么?我应该如何修复它

主类:

package StackOverflow;
import java.awt.CardLayout;
import javax.swing.*;

public class Main {

    private JFrame frame = new JFrame();
    private JPanel MainPanel = new JPanel();
    private CardLayout cl = new CardLayout();
    private GamePanel gp = new GamePanel();

    public Main(){
        frame.setLocation(100, 100);
        frame.setSize(1200, 700);
        frame.setTitle("Rain | Pre-Alpha");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        MainPanel.setLayout(cl);

        MainPanel.add(gp, "1");

        frame.add(MainPanel);

        cl.show(MainPanel, "1");

        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new Main();
    }
}    
package StackOverflow;
import java.awt.Color;
import javax.swing.JPanel;

public class GamePanel {
    private JPanel GamePanel = new JPanel();

    public GamePanel(){
        GamePanel.setBackground(Color.green);
    }
}
游戏面板类:

package StackOverflow;
import java.awt.CardLayout;
import javax.swing.*;

public class Main {

    private JFrame frame = new JFrame();
    private JPanel MainPanel = new JPanel();
    private CardLayout cl = new CardLayout();
    private GamePanel gp = new GamePanel();

    public Main(){
        frame.setLocation(100, 100);
        frame.setSize(1200, 700);
        frame.setTitle("Rain | Pre-Alpha");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        MainPanel.setLayout(cl);

        MainPanel.add(gp, "1");

        frame.add(MainPanel);

        cl.show(MainPanel, "1");

        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new Main();
    }
}    
package StackOverflow;
import java.awt.Color;
import javax.swing.JPanel;

public class GamePanel {
    private JPanel GamePanel = new JPanel();

    public GamePanel(){
        GamePanel.setBackground(Color.green);
    }
}

无法将类添加到
JFrame
,JFrame接受
组件

public Component add(Component comp, int index)
所以你有很多方法来解决你的问题:

选择1 改为扩展
JPanel

public class GamePanel extends JPanel {

    public GamePanel() {
        super.setBackground(Color.green);
    }
}
选择2 您可以使用getter和setter:

public class GamePanel {

    private JPanel GamePanel = new JPanel();

    public JPanel getGamePanel() {
        return GamePanel;
    }

    public void setGamePanel(JPanel GamePanel) {
        this.GamePanel = GamePanel;
    }

    public GamePanel() {
        GamePanel.setBackground(Color.green);
    }

}
您可以这样添加您的JPanel:

MainPanel.add(gp.getGamePanel(), "1");