我正在构建一个使用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
更新
到目前为止,我唯一的解决办法是复制我的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