JInternalFrame和JFrame之间的Java Swing切换扩展了

时间:2016-02-12 14:42:50

标签: java swing parent-child jinternalframe jdesktoppane

我正在构建一个使用JDesktopPane和JInternalFrames的应用程序,目前这样工作

desktopPane.java

// this program handles the main desktop pane

public class desktopPane extends JFrame {

    static JDesktopPane mainDesktopPane;
    static JMenuItem itemChildProgram;

    public desktopPane() {
        mainSetup();
        mainBuild();
        mainActions();
    }

    public static void main(String[] args) {
        desktopPane mainFrame = new desktopPane();
        mainFrame.setVisible(true);
    }

    public void mainSetup() {
        // set title and size and close operation etc.
    }

    public void mainBuild() {
        mainDesktopPane      = new JDesktopPane();

        JMenuBar mainMenuBar = new JMenuBar();
        JMenu menuRun        = new JMenu("Run");
        itemChildProgram     = new JMenuItem("Child Program");

        add(mainDesktopPane);

        setJMenuBar(mainMenuBar);
        mainMenuBar.add(menuRun);
        menuRun.add(itemChildProgram);
    }

    public void mainActions() {
        actionChildProgram execChildProgram = new actionChildProgram();
        itemChildProgram.addActionListener(execChildProgram);
    }

    public class actionChildProgram implements ActionListener {
        public void actionPerformed(ActionEvent execChildProgram) {
            childProgram classChildProgram = new childProgram(mainDesktopPane);
        }
    }

}

所以程序只是构建我的主屏幕,它有一个调用我的其他程序的按钮

childProgram.java

public class childProgram {

    public childProgram(JDesktopPane mainDesktopPane) {
        // database connection and data retrieval goes here

        childProgramGUI child = new childProgramGUI();
        child.setVisible(true);
        mainDesktopPane.add(child);
    }

}

所以这个程序只是准备一些数据和一堆其他的东西,然后调用数据可见的gui。现在的gui文件非常简单

childProgramGUI.java

public class childProgramGUI extends JInternalFrame {
    // some gui design goes here
}

当从desktopPane.java中的JDesktopPane调用childProgram.java时这很好用但是如何将childProgram.java作为独立程序调用而不将其作为子项添加到mainDesktopPane。

我只需要在满足条件时在childPane之外运行childProgram。

如果我对代码进行了以下更改

  • 将childProgramGUI.java更改为JFrame而不是JInternalFrame
  • 删除childProgram.java中的行:mainDesktopPane.add(child);

然后它按照我的意图工作,但我不能仅使用代码(我知道)将childProgramGUI.java的扩展名更改为JFrame

更新

到目前为止,我唯一的解决办法是复制我的gui程序,所以现在我已经

childProgramGUI.java

public class childProgramGUI extends JInternalFrame {
    // some gui design goes here
}

除了具有完全相同代码的独立代码,除了它是一个JFrame

childProgramGUI_Standalone.java

public class childProgramGUI_Standalone extends JFrame {
    // the exact same gui design goes here
}

然后在我的mainDesktopPane.add(child)上添加一个条件。我对它不满意,但它可以运行程序进出它的JDesktopPane

0 个答案:

没有答案