JFrame等待另一个JFrame

时间:2013-02-18 17:12:03

标签: java multithreading swing jframe task

我有以下情况。有一个类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

4 个答案:

答案 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);