4

我在使用 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 的内容窗格。我想要的是,能够在桌面上添加 JPanel(特别是在 JMenuBar 下方)。不幸的是,我无法做到这一点。最后,这是我的问题:

1-) 可以在 JDesktopPane 上绘制 JPanel 对象吗?我做了一些挖掘,我猜它与 JLayeredPane 功能有关,但不幸的是我无法实现它。

2-) 如果无法在 JDesktopPane 上绘制 JPanel 对象,我该如何做我想做的事,有什么建议吗?我只是想,“将两个 JPanel 添加到 JFrame,根据需要使用顶部的一个,并将 JDesktopPane 绘制到下面的第二个 JPanel 中”。这是一个好方法吗?

谢谢您的回答..

4

1 回答 1

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"));
    }
}

它工作正常。您应该根据 JInternalFrame 的要求在 JPanel 上调用 setVisible(true)、setBounds()。

于 2009-09-25T04:05:06.597 回答