【问题标题】:Which components can be added in a JDesktopPane?可以在 JDesktopPane 中添加哪些组件?
【发布时间】:2010-12-01 06:13:11
【问题描述】:

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

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

感谢您的回答..

【问题讨论】:

    标签: swing jpanel jdesktoppane


    【解决方案1】:

    可以绘制 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()。

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 2012-09-22
      • 1970-01-01
      • 2014-07-08
      • 2011-01-15
      • 2011-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多