2017-04-05 76 views
1

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

的GamePanel类:

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

你不能在一个类添加到您的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");