2014-10-29 6 views
1

아래 예제 코드를 참조하십시오. 예제 단추를 몇 번 클릭 한 후, 마지막 대화 상자가 열리는 방법을 찾으십니까? 이것은 실제 사용 사례입니다. 사용자가 하나 또는 두 개의 모달 대화 상자를 열고 마지막 대화 상자에서 장기 실행 백그라운드 작업을 시작하는 버튼을 클릭 한 다음 백그라운드 작업이 실행되는 동안 다른 응용 프로그램으로 전환했습니다. 완료되면 작업은 응용 프로그램으로 다시 전환 할 때 해당 알림 창이 올바른 대화 상자 상단에 표시되도록 부모와 올바른 대화 상자가있는 알림 창을 표시해야합니다.현재 표시되는 대화 상자를 찾는 방법은 무엇입니까?

import java.awt.FlowLayout; 
import java.awt.Window; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JDialog; 
import javax.swing.SwingUtilities; 
import javax.swing.WindowConstants; 

public class Example 
{ 

    private JDialog createDialog(final Window parent, final int count) 
    { 
     final JDialog dialog = new JDialog(parent, "Dialog " + count); 
     dialog.setModal(true); 
     dialog.getContentPane().setLayout(new FlowLayout()); 

     final JButton button = new JButton("Open Dialog " + (count + 1)); 
     button.addActionListener(new ActionListener() 
     { 

      @Override 
      public void actionPerformed(final ActionEvent e) 
      { 
       final JDialog nextDialog = createDialog(dialog, count + 1); 
       nextDialog.pack(); 
       nextDialog.setLocationRelativeTo(dialog); 
       nextDialog.setVisible(true); 
      } 

     }); 

     dialog.getContentPane().add(button); 
     return dialog; 
    } 

    public static void main(final String[] arguments) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 

      @Override 
      public void run() 
      { 
       final Example example = new Example(); 
       final JDialog dialog = example.createDialog(null, 1); 
       dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 
       dialog.pack(); 
       dialog.setLocationRelativeTo(null); 
       dialog.setVisible(true); 
      } 

     }); 
    } 

} 

답변

2

당신은 분명, 현재의 현재의 키보드 포커스가있는 구성 요소를 포함하는 윈도우를 반환합니다 KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow() ...

+0

확실히 내가 찾고 있어요하지 무엇을 사용할 수 있습니다. 포커스가 없어도 창이 제대로 표시 될 수 있습니다. 문제는 현재 포커스 소유자의 창을 찾는 것이 아닙니다. 실제로 프레임의 포커스가 있는지 여부에 관계없이 일부 프레임의 선행 모달 대화 상자를 찾는 것입니다. 장기 실행 백그라운드 태스크는 완료 후에 통지 창을 가져와야합니다. 실행 중에는 사용자가 프레임 등을 최소화하지 않고 다른 응용 프로그램으로 전환했을 수 있습니다. –

+0

초점을 맞춘 창의 하위 창을 가져 오는 중 ... 그러면 어떤 창이 선택됩니까? – MadProgrammer

+0

업데이트 된 예제 코드를 참조하십시오. –

관련 문제