可以在JDesktopPane中添加哪些组件?

时间:2009-09-24 22:07:30

标签: swing jpanel jdesktoppane

我在使用Swing设计MDI应用程序时遇到了一些麻烦。

我可以轻松实现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-)如果无法在JDesktopPane上绘制JPanel对象,我怎样才能设法做我想要的任何建议?我只想到,“将两个JPanel添加到JFrame中,根据需要使用顶部的一个,并将JDesktopPane绘制到下面的第二个JPanel中”。这是一个好方法吗?

感谢您的回答..

1 个答案:

答案 0 :(得分: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 required。