本帖最后由 fdcumt 于 2013-06-24 11:02:28 编辑

解决方案 »

  1.   

    最后调用setVisible(true)。组件还没添加就显示出来,明显是错误的做法。
      

  2.   

    第一个程序必须先调用setvisible再添加组件,这又是什么原因???
      

  3.   

                  可能与你设置的尺寸有关系的呢!有的时候你设置的尺寸大小小啦!_MenuFrame.setSize(300,400);改大一点再试试啊!
      

  4.   

    setvisible要放在最后面。就好比楼房要建好才能住人
      

  5.   

    看一下我的这个程序
    import java.awt.Frame;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JLabel;
    import javax.swing.JButton;
    import java.awt.BorderLayout;class TestFrameProblem
    {
    JFrame container=new JFrame(); /**/
     JLabel title ;
     JPanel centerContainer;
     JButton click;
     JLabel statusBar; public TestFrameProblem()
    {

    container.setSize(300,500);
    container.setVisible(true); title=new JLabel("edit here");
    click=new JButton("click here"); centerContainer=new JPanel();
    centerContainer.add(click);
    statusBar=new JLabel("status is in here");

    container.add(title,BorderLayout.NORTH);
    container.add(centerContainer,BorderLayout.CENTER);
    container.add(statusBar,BorderLayout.SOUTH); }

    public static void main(String[] args) 
    {
    new TestFrameProblem();
    }
    }你运行一下。看看
      

  6.   

    setVisible()与放置的位置没有关系。在api中,我们可以知道,其作用就是为了显示窗体。
    GUI程序是时间驱动的,不是顺序执行的。当最大化/最小化就是事件,GUI会重新加载组件,所以此时看见的就是完整的。
      

  7.   

    一个setvisible放在前面正确显示,一个放在后面正确显示,huntor说必须放在后面???明显和结果不一致嘛。
      

  8.   

    Swing 组件同时是容器,有一个状态叫做是否 "valid"
    即其内部子控件有添加、删除等操作,或者其布局产生任何变化后,有没有重新算好所有子控件的大小和位置setVisible(true) 可以先写,后面只要这样调用即可:
    ((JComponent)_MenuFrame.getContentPane()).revalidate();
    ((JComponent)_MenuFrame.getContentPane()).repaint();