为什么JInternalFrame会删除所有其他组件

时间:2014-04-29 11:13:11

标签: java swing jinternalframe

我在JInternalFrame内添加JFrame完成后,添加框架的方法是点击JMenuItem图标,这样就可以了,但是当添加了框架时旧组件被删除,白色显示。我想要做的是设置修复JInternalFrame位置与其他组件没有影响其他组件

JInternalFrame的代码

    package animeaidvlcj;

import javax.swing.JInternalFrame;


/* Used by InternalFrameDemo.java. */
public class MyInternalFrame extends JInternalFrame {
    static int openFrameCount = 0;
    static final int xOffset = 0, yOffset = 25;

    public MyInternalFrame() {
        super("Document #" + (++openFrameCount), 
              true, //resizable
              true, //closable
              true, //maximizable
              true);//iconifiable

        //...Create the GUI and put it in the window...

        //...Then set the window size or call pack...
        setSize(300,300);

        //Set the window's location.
        setLocation(xOffset*openFrameCount, yOffset*openFrameCount);
    }
}

行动代码

 Action newAction = new AbstractAction("New", newIcon) {
        @Override
        public void actionPerformed(ActionEvent e) {
            desktop = new JDesktopPane();
            createFrame();
            setContentPane(desktop);
            desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
        }
    };

创建方法

protected void createFrame() {
    MyInternalFrame frame = new MyInternalFrame();
    frame.setVisible(true); //necessary as of 1.3
    desktop.add(frame);
    try {
        frame.setSelected(true);
    } catch (java.beans.PropertyVetoException e) {}
}

1 个答案:

答案 0 :(得分:2)

  

"为什么JInternalFrame会删除所有其他组件"

首先,请在Action

中查看此代码
desktop = new JDesktopPane();
createFrame();
setContentPane(desktop);  <== this line in particular

您正在使用setContenPane()设置框架的内容窗格(假设desktop正在调用类框架),这将删除包含所有组件的上一个内容窗格。因此,唯一会显示的是desktop以及新的JInternalFrame

除非您要创建Multiple Document Interface (MDI),主要用于桌面窗格和内部框架,否则我建议您使用JDialog并忘记DesktopPane。你可以看到How to use Dialogs。除了您可以选择modality之外,它与创建JFrame几乎相同。