2009-09-24 20 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

相關問題