我有以下情况。有一个类JFrame1执行一系列指令并将焦点放在另一个JFrame2上,然后重新开始。当JFrame2获得焦点时,JFrame1应该期望JFrame2处理而不是执行以下指令。怎么办?
JFrame1{
//instruction 1
//instruction 2
// ....
//instruction 6
JFrame2 starts
[waiting for results of JFrame2]
//instruction 7
//instruction 8}
JFrame1应在恢复焦点时执行指令7和8
答案 0 :(得分:3)
通常,让JFrame启动另一个JFrame是不好的,除非它们是完全独立的。我建议您启动JDialog而不是JFrame2。 JDialog的使用方式与JFrame相同,所有命令都相同。启动JDialog的JFrame将暂停,直到JDialog被放置,并且在JDialog类中调用this.dispose()。然后它看起来像这样:
JFrame1 starts
instruction 1
instruction 2
...
instruction 6
JDialog (like JFrame2) starts
(JFrame1 waiting for JDialog to be disposed with this.dispose())
instruction 7
...
答案 1 :(得分:0)
答案 2 :(得分:0)
我认为你的意思是,目前,指令7和8在第2帧打开后立即发生。要在JFrame2关闭后执行指令7和8,您可以使JFrame2成为JDialog或JOptionPane的模态对话框,或者您可以将侦听器附加到JFrame2,如下所示:
frame2.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// instruction 7
// instruction 8
}
});
答案 3 :(得分:0)
您应该尝试将您正在做的事情组织到一个类中并创建对象。显然这是一个非常简单的例子:
public class Frames extends JFrame{
public Frames(){
super("Frame 1");
setSize(500,500);
//setup frame 1 look
doWorkMethodForFrame1();
}
public Frames(int arg){
super("Frame 2");
setSize(500,500);
//setup frame 2 look
doWorkMethodForFrame2(data);
}
public void doWorkMethodForFrame1(){
//do work
setVisible(false);
}
public void doWorkMethodForFrame2(int data){
//do work
setVisible(false);
}
}
//call your frames
new Frames();
new Frames(dataSend);