有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在处理一个菜单,我想使它尽可能面向对象,所以我为菜单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);
    }
}

共 (1) 个答案

  1. # 1 楼答案

    无法将类添加到JFrame,JFrame接受Component

    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");