Когда я запускаю класс MainTest, testWindow появляется так, как должно.Но когда нажата кнопка «Пуск», я хочу закрыть этот кадр, а затем выполнить другие действия в основном методе.Как бы я поступил об этом?
Вы хотите функциональность модального диалогового окна, окна, которое останавливает выполнение программы до тех пор, пока с ним не будут обработаны.И в этой ситуации вы не должны использовать JFrame, который не допускает этот тип модальности, а скорее модальный диалог Swing, такой как JOptionPane или JDialog, который вы создаете, делаете модальным и отображаете.Затем выполнение GUI-программы останавливается до тех пор, пока диалоговое окно перестает быть видимым.
Если вы сделаете это, все, что слушатель действия кнопки должен сделать, это закрыть диалоговое окно, в котором он находится, вот и все.
Примечание: здесь вы неправильно используете наследование, поскольку ваш класс MainTest должен определенно не выходить за пределы класса TestWindow.Хотя это может не иметь значения в этом простом коде, оно может и будет вызывать проблемы в будущем коде.
например,
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.Dialog.ModalityType;
import java.awt.event.*;
public class TestWindow {
public static void testWindow() {
// JFrame frame = new JFrame("test");
final JDialog frame = new JDialog((JFrame) null, "Test", ModalityType.APPLICATION_MODAL);
frame.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel text = new JLabel("this is a test!", SwingConstants.CENTER);
// text.setBounds(0, 30, 300, 50);
JButton button = new JButton("Start");
// button.setBounds(100, 100, 100, 40);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
frame.dispose();
}
});
int eb = 15;
JPanel panel = new JPanel(new BorderLayout(eb, eb));
panel.setBorder(BorderFactory.createEmptyBorder(eb, eb, eb, eb));
panel.add(text, BorderLayout.PAGE_START);
panel.add(button, BorderLayout.CENTER);
frame.add(panel);
frame.pack();
// frame.setSize(300, 200);
// frame.setLayout(null);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
и
import javax.swing.SwingUtilities;
public class TestTestWindow {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
TestWindow.testWindow();
System.out.println("Called after test window no longer visible");
});
}
}