Обновление: в данный момент я решил, что самое простое - использовать отдельные JPane, а не JFrame для подменю. Я создам их все вместе, сделаю остальных невидимыми и переключу таким образом. Меню не настолько сложны, что это будет слишком большой проблемой.
Я создаю графический интерфейс, который открывает другое окно JFrame от нажатия кнопки в другом. Я просто не уверен в правильном подходе к закрытию главного окна при нажатии одной из кнопок, но не к закрытию всей программы. Также я не уверен, как сделать видимым второе окно (строка кода, которую я пробовал из другого примера, не работает). Второй всплывающий фрейм предоставит пользователю варианты действий и фактически вызовет другую программу / класс для запуска по нажатой в нем кнопке (результатом одного из вариантов является длинная программа, поэтому я думаю, что мне нужно запустить это в другой теме.) После завершения работы программы у пользователя будет возможность вернуться в главное меню, которое закроет второе меню (и уничтожит его), или выйдет из программы (и, таким образом, закроет главное меню и все очистит). В главном меню у них также будет возможность закрыть программу, где все будет очищено. Это то, что я до сих пор:
Основной графический интерфейс:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class GUIMain implements ActionListener {
GUIMain(){
JFrame jFrm = new JFrame("Data Mining Application");
jFrm.setSize(800,600);
jFrm.setLayout(new BorderLayout());
jFrm.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
prepareGUI(jFrm.getContentPane());
jFrm.pack();
jFrm.setVisible(true);
}
private void prepareGUI(final Container pane){
JPanel mainPanel = new JPanel(new GridLayout(3,2,50,50));
JButton b1 = new JButton("Pre-processing");
b1.addActionListener(this);
mainPanel.add(b1);
pane.add(mainPanel,BorderLayout.CENTER);
}
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new GUIMain();
}
});
}
@Override
public void actionPerformed(ActionEvent e) {
switch (e.getActionCommand()){
case "Pre-processing":
PreProcessingGUI window = new PreProcessingGUI();
window.getFrame.setVisible(true); //not working
break;
// etc
default:
break;
}
}
}
Класс и JFrame, который называется:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class PreProcessingGUI implements ActionListener {
PreProcessingGUI(){
JFrame jFrm = new JFrame("Pre-processing");
jFrm.setSize(800,600);
jFrm.setLayout(new BorderLayout());
jFrm.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
prepareGUI(jFrm.getContentPane());
jFrm.pack();
}
private void prepareGUI(final Container pane) {
//do stuff
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
PreProcessingGUI window = new PreProcessingGUI();
// Not surewhat to do here either as the program is not recognising the getFrame method
//window.getFrame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
@Override
public void actionPerformed(ActionEvent e) {
// do stuff
}
}