См. Пример кода ниже. Несколько раз нажав кнопку примера, как открыть последний диалог? Это реальный случай использования. Пользователь открыл один или два модальных диалоговых окна и нажал кнопку, запускающую длительную фоновую задачу в последнем диалоговом окне, и затем переключился на другое приложение во время выполнения этой фоновой задачи. По завершении задача должна отображать окно уведомлений с правильным диалоговым окном в качестве родителя, чтобы при возврате к приложению это окно уведомления отображалось поверх правильного диалога.Как найти текущий диалог?
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);
}
});
}
}
Не совсем то, что я ищу. Окно может отображаться без фокуса. Вопрос не в том, чтобы найти окно текущего владельца фокуса. Это действительно о том, чтобы найти предварительный модальный диалог некоторого кадра - независимо от того, имеет ли этот фрейм фокус или нет. После завершения задачи, работающей в фоновом режиме, появляется окно с уведомлением. Во время работы пользователь может переключиться на другое приложение, не сводя к минимуму фрейм и т. Д. –
Получите дочерние окна сфокусированного окна ... вопрос тогда в каком окне вы бы выбрали? – MadProgrammer
См. Обновленный примерный код. –