2013-01-07 50 views
1

我有两个面板,并希望他们在我的JFrame中显示,但是当我尝试这样,我只能看到第二个。有人可以帮帮我吗? :(两个面板在一个JFrame中?

import javax.swing.JFrame; 

public class MainWindow { 

CardLayout layout; 
JFrame frame; 
Player panel1; 
Block panel2; 

public MainWindow() { 
    frame = new JFrame("Rechteck"); 
    panel1 = new Player(); 
    panel2 = new Block(); 
    panel1.addKeyListener(new KeyListen(panel1)); 
    frame.add(panel1); 
    frame.add(panel2); 
    frame.setSize(500,500); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 
}} 
+1

另请参阅[*初始线程*](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html)。 – trashgod

回答

1

创建一个JPanel添加到JFrame。添加PANEL1和是Panel2新面板。JFrame中只能有一个孩子,通常是通过调用JFrame.setContentPane()设置。

+2

'JFrame'是一个容器,从技术上讲,它可以有任何数量的孩子(事实上它的确如此)。 “JFrame”的实现将调用重定向到“add”和“remove”(以及其他容器管理方法)到内容窗格。您可以简单地将布局管理器改为类似'GridLayout'的东西。没有必要第三个窗格 - 恕我直言 – MadProgrammer

4

你有加入你的两个面板的你JFrame —的BorderLayout.CENTER唯一一个能够占据那个位置,。这将是在这种情况下,最后一个加入,panel2

为了使面板占用的空间均匀,你可以使用GridLayout

frame.setLayout(new GridLayout(2, 1)); 

旁白:更好登记的关键事件在Swing组件时使用Key Bindings

+0

谢谢。但仍然存在一个问题:每个面板有两部分框架 –

+0

上述布局将布置2个面板。你有更多?你是否也在使用CardLayout? 2个面板内的布局是什么? – Reimeus