这样做:
pl p = new p1();
p.setSize( w,h);
p.setVisible( true );
desktop.add(new pl());
生成时默认是不可见的

解决方案 »

  1.   

    错了,应该是
    desktop.add( p );
      

  2.   

    我的pl是另外一个独立的类,照你这么说是不是必须把pl放到mainface里来??
      

  3.   

    可以不放到mainface里来
    你在p1的默认构造函数里调用setSize和setVisible也一样!
      

  4.   

    那样就不性了,窗口之间还是没有建立起关系来,是不是我的desktoppane 建立得不 对啊我是把desktoppane放在一个pane的borderlayout里。我用desktop.add(new pl());和直接pl p=new pl();出来的效果完全一样啊。
      

  5.   

    还没搞定啊,找一个以前的例子给你吧
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    class MainFrame extends JFrame 
    { public MainFrame(String title) 
    {
    // TODO: Add your code here
    setTitle( title );
    setSize( 300, 300 );
    addMenu();
    getContentPane().setLayout( new GridLayout( 1, 1 ) );
    getContentPane().add( desktop );
    setDefaultCloseOperation( EXIT_ON_CLOSE );
    setVisible( true );
    } private void addMenu() 
    {
    // TODO: Add your code here
    JMenu fileMenu = new JMenu( "File" );

    newItem = new JMenuItem( "New", 'N' );
    fileMenu.add( newItem );
    mb.add( fileMenu );
    newItem.addActionListener( new MenuActionListener() );
    setJMenuBar( mb );
    }
    private void createInternalFrame() 
    {
    // TODO: Add your code here

    JInternalFrame internalFrame = new JInternalFrame( "Internal:" + ( count++ ), true, 
     true, true, true  );
    internalFrame.setSize( 100, 100 );
    internalFrame.setVisible( true );
    desktop.add( internalFrame );
    }
    class MenuActionListener implements ActionListener
    {
    public void actionPerformed(ActionEvent e)
    {
    if( e.getSource() == newItem )
    MainFrame.this.createInternalFrame();
    }
    }
    JDesktopPane desktop = new JDesktopPane();
    JMenuBar mb = new JMenuBar();
    JMenuItem newItem;
    static int count = 1;
    }
    public class InternalFrameTest {

    public static void main(String[] args) {
    new MainFrame( "InternalFrame" );
    }
    }