Я создаю приложение, которое использует JDesktopPane и JInternalFrames, которые на данный момент работают так:
рабочий столPane.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);
}
}
}
Итак, эта программа просто создает мой главный экран и имеет кнопку, которая вызывает другую мою программу.
дочерняя программа.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.java
public class childProgramGUI extends JInternalFrame {
// some gui design goes here
}
Это отлично работает при вызове childProgram.java из JDesktopPane в desktopPane.java, но как я могу вызвать childProgram.java как отдельную программу, не добавляя ее в mainDesktopPane как дочернюю.
Мне нужно, чтобы дочерняя программа запускалась за пределами панели рабочего стола только при выполнении условия.
Если я внесу следующие изменения в код
- измените childProgramGUI.java на JFrame вместо JInternalFrame
- удалите строку в childProgram.java: mainDesktopPane.add(child);
Затем он работает так, как я намеревался, но я не могу изменить расширение childProgramGUI.java на JFrame только с кодом (о котором я знаю)
ОБНОВИТЬ
Пока что единственное решение, которое у меня есть для этого, - это просто дублировать мои программы с графическим интерфейсом, поэтому теперь у меня есть
дочерняя программаGUI.java
public class childProgramGUI extends JInternalFrame {
// some gui design goes here
}
А также автономный с точно таким же кодом, за исключением того, что это JFrame.
дочерняя программаGUI_Standalone.java
public class childProgramGUI_Standalone extends JFrame {
// the exact same gui design goes here
}
А затем поставьте условие на мой mainDesktopPane.add(child). Я не доволен этим, но он работает для запуска программы в JDesktopPane и из нее.
JPanels
и не используйтеextends JFrame
илиextends JInternalFrame
(если для этого нет действительно веской причины, но ее почти никогда не бывает...) - person Marco13   schedule 12.02.2016JFrame
, либо наJInternalFrame
. (Как следует из названия: это всего лишь фреймы (!) вокруг фактического содержимого). Обычно нет причин продлевать ни один из них. Обычно вы не переопределяете методы этих классов. Расширение их в основном выполняется в (сомнительных) вводных руководствах или, реже, в небольших примерах. Также см. stackoverflow. com/questions/1143923/ .... - person Marco13   schedule 13.02.2016