代码如下
import javax.swing.JFrame;
import javax.swing.JLabel;
//import java.awt.Component;
class test
{
private JFrame jf = new  JFrame(" Test "); 
public void init()
{

//jf.resize(100,200);
JLabel j1 = new JLabel("hello,");
JLabel j2 = new JLabel("good!"); jf.add(j2);
jf.add(j1);
jf.pack();
jf.setVisible(true);
}
}
public class JFrameTest
{
public static void main(String[] args)
{
test jte = new test();
jte.init();
}
}为什么我想同时显示两个label,但只能显示最后add的label,
是JFrame 对象不能直接加元素进去吗?要加个JPanel之类的东东才行?最好能说说JFrame , GridLayout, JPanel之间的关系,
看一些例子中,都是先向JFrame里先加GridLayout ,再往 GridLayout里加JPanel,然后才向JPanel里加想要的Component,为什么要这么麻烦呢?
是因为JFrame类本身的限制吗?请稍微解释一点原理.深入一点不怕.谢谢了.

解决方案 »

  1.   

    与布局管理器有关.jf.add(j2,BorderLayout.WEST);
    jf.add(j1,BorderLayout.EAST); 
      

  2.   

    1、首先容器类需要设置其布局管理器,比如 JPanel.setLayout(new BorderLayout());2、JFrame中底层容器载体的默认布局管理器为 BorderLayout
       即 JFrame.getContentPane().getLayout() = BorderLayout;3、BorderLayout即为 东西南北中 布局,添加组件的时候,需要设置布局参数 BorderLayout.CENTER、SOUTH、NORTH、WEST、EAST;
       通常向BorderLayout的容器添加组件的时候,如果使用 add(JComponent)不添加参数的时候,默认是CENTER,
       所以你调用两次 add(JComponent),实际上第二次将第一次的组件覆盖了。   应该使用 add(JComponent, 参数);
       
       就BorderLayout来说:
       panel.add(JComponent, BorderLayout.CENTER);
    或者panel.add(JCmponent,"Center");
      

  3.   

    是,加了布局管理器,或者panel都可以了,
    我只是不明白,为什么JFrame类 只能添加一个JLable,
    那如果是布局管理器也只能加一种,
    这个可能是比较底层了一点,其实不必理会只要记得加Layout就可以了,
    我只是好奇,想了解以下JFrame的add,是否只能加一个Componet
      

  4.   

    JFrame.getContentPane().getLayout() = BorderLayout; 这一句我有点疑问,JFrame.getContentPane().getLayout() 获得的是layout类型,而不是表示该layout类型的字符串.
    那么在程序中该如何判断到底获得的是那种layout呢?
      

  5.   

    JFrame.getContentPane().getLayout() = BorderLayout;意思就是说默认的Layout是BorderLayout 
      

  6.   

    我知道是这个意思,
    JFrame.getContentPane().getLayout() 的返回值是boyderlayout对象
    但我应该怎么判断这个返回值, 让我知道它就是boyderlayout而不是flowlayout;
    例如一个什么函数
    judgetype(JFrame.getContentPane().getLayout() )= "boyderlayout";judgetype是我假想的函数