嗨,我是编程的新手,现在就想弄清楚。预先感谢您的帮助。
我正在尝试在一个类中创建一个按钮,当按下该按钮时,另一类可以知道。
这是第一个包含要在其他类中调用的testWindow方法的类。
import javax.swing.*;
import java.awt.event.*;
public class TestWindow {
public static void testWindow() {
JFrame frame = new JFrame("test");
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);
frame.add(text);
frame.add(button);
frame.setSize(300,200);
frame.setLayout(null);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//I don't know what to put here
}
});
}
}
这是我要使用testWindow方法的第二个类。
public class MainTest extends TestWindow {
public static void main(String[] arg){
testWindow();
//other stuff that happens when "start" is pressed
}
}
当我运行MainTest类时,将出现应有的testWindow。但是,当按下“开始”按钮时,我想关闭该框架,然后在main方法中执行其他操作。我将如何处理?
答案 0 :(得分:3)
当我运行MainTest类时,将出现应有的testWindow。但是,当按下“开始”按钮时,我想关闭该框架,然后在main方法中执行其他操作。我该怎么办?
您需要一个 modal 对话框的功能,该对话框可暂停程序流,直到处理完为止。在这种情况下,您不应该使用不允许这种形式的模态的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");
});
}
}