Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么JInternalFrame会移除所有其他组件_Java_Swing_Jinternalframe - Fatal编程技术网

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

Java 为什么JInternalFrame会移除所有其他组件,java,swing,jinternalframe,Java,Swing,Jinternalframe,我在我的JFrame中添加了JInternalFrame,添加框架的方法是单击JMenuItem图标,这很好,但一旦添加框架,旧组件就会被删除,并显示白色。我试图做的是设置另一个组件的fixJInternalFrame位置,而不影响其他组件 JInternalFrame的代码 package animeaidvlcj; import javax.swing.JInternalFrame; /* Used by InternalFrameDemo.java. */ public cl

我在我的
JFrame
中添加了
JInternalFrame
,添加框架的方法是单击
JMenuItem
图标,这很好,但一旦添加框架,旧组件就会被删除,并显示白色。我试图做的是设置另一个组件的fix
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) {}
}
“为什么JInternalFrame会删除所有其他组件”

首先在您的
操作中查看此代码

desktop = new JDesktopPane();
createFrame();
setContentPane(desktop);  <== this line in particular
desktop=newjdesktoppane();
createFrame();

setContentPane(桌面);我正在尝试为vlcj使用其他帧,因此其他选项是个坏主意,但我是否可以将setContentPane(桌面)替换为其他帧,如jpanelDo?两个帧需要同时访问?例如,当新窗口打开时,是否希望能够访问主框架?当然可以。但我不确定,因为我认为vlcj可以在另一个框架中运行,而我正在使用主框架。您可以创建一个Modelesss
JDialog
您创建它就像一个框架一样。唯一的区别是它不会包含在主框架内。但是,如果您确实希望将jdeesktoppane与内部框架一起使用,那么您必须将应用程序重新构造为围绕桌面窗格构建。您只需将内容窗格与框架切换,并期望原始内容窗格上的组件仍然显示。对于该对话框,只需
setModel(false)
。能否将JDialog嵌入到jframed中以便更快地获得更好的帮助,请发布一个(最简单的完整且可验证的示例)。