2009-09-24 46 views
4

我在使用Swing设计MDI应用程序时遇到了一些麻烦。哪些组件可以添加到JDesktopPane中?

我没有问题实现JDesktopPane & JInternalFrames,我的问题会更具体些。这里是一眼我的基本容器框架:

package applicationGUI; 

import javax.swing.JFrame; 

public class DesktopContainer extends JFrame{ 
/* Fields */ 

/* Constructors */ 
    public DesktopContainer(){ 
     setContentPane(new Desktop()); 
     setJMenuBar(AppllicationMenuBar.getMenuBar()); 

    } 
/* Public Methods */ 
    public Desktop getDesktop(){ 
     return (Desktop)getContentPane(); 
    } 
} 

和桌面:

public class Desktop extends JDesktopPane{} 

注意,我设置桌面作为DesktopContainer的内容窗格。我想要的是,能够在桌面上添加JPanels(特别是,在JMenuBar的下方)。不幸的是,我无法做到这一点。最后,这里是我的问题:

1-)可以在JDesktopPane上绘制JPanel对象吗?我做了一些挖掘,我想这与JLayeredPane功能有关,但不幸的是我无法实现它。 2)如果JPanel对象不能在JDesktopPane上绘制,我怎么能设法做到我想要的,有什么建议?我只是想道,“向JFrame添加两个JPanel,使用顶层的JPanel来满足您的需求,并将JDesktopPane拖入下面的第二个JPanel中。这是一个好方法吗?

谢谢你的答案..

回答

6

一个JPanel,可以得出,并且可以在JDesktopPane中

public class DesktopContainer extends JFrame { 
/* Constructors */ 
    public DesktopContainer(){ 
     setContentPane(new Desktop()); 
     setJMenuBar(createJMenuBar()); 

     APanel a = new APanel(); 
     a.setBounds(0, 0, 200, 200); 
     a.setVisible(true); 
     getDesktop().add(a); 
    } 
    .... 
} 

class Desktop extends JDesktopPane { 
} 

class APanel extends JPanel { 
    public APanel() { 
     setLayout(new BorderLayout()); 
     add(new JButton("Hello stackoverflow")); 
    } 
} 

它工作正常接收事件。 您应该调用JPanel上的setVisible(true),setBounds()作为JInternalFrame所需的。

+0

解决了它,谢谢xrath .. – 2009-09-25 15:44:13

+0

感谢您的setBounds()提示! – Hamy 2010-03-26 05:47:37

相关问题