-2

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

4 回答 4

3

通常,让一个 JFrame 启动另一个 JFrame 是不好的,除非它们完全独立。我建议您启动 JDialog 而不是 JFrame2。JDialog 的使用方式与 JFrame 相同,所有命令都相同。启动 JDialog 的 JFrame 将暂停,直到从 JDialog 类中调用 this.dispose() 来处理 JDialog。然后它看起来像这样:

JFrame1 starts
instruction 1
instruction 2
...
instruction 6
JDialog (like JFrame2) starts
(JFrame1 waiting for JDialog to be disposed with this.dispose())
instruction 7
...
于 2013-02-18T17:17:59.513 回答
0

你可以看看http://docs.oracle.com/javase/6/docs/api/java/awt/Component.html#isFocusOwner()

高温高压

于 2013-02-18T17:18:01.790 回答
0

我假设您的意思是当前,指令 7 和 8 在第 2 帧打开后立即发生。要在 JFrame2 关闭后执行指令 7 和 8,您可以使用 JDialog 或 JOptionPane 使 JFrame2 成为模态对话框,或者您可以将侦听器附加到 JFrame2,如下所示:

frame2.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosing(WindowEvent e) {
        // instruction 7
        // instruction 8
    }
});
于 2013-02-18T17:18:39.273 回答
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);
于 2013-07-05T19:28:13.603 回答