package com.revolsys.swing.component; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Window; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.LayoutStyle; import javax.swing.WindowConstants; import org.jdesktop.swingx.JXBusyLabel; import com.revolsys.swing.SwingUtil; import com.revolsys.swing.layout.GroupLayouts; import com.revolsys.swing.parallel.Invoke; public class WindowOpener extends JFrame implements WindowListener { private static final long serialVersionUID = 1L; public static WindowOpener newWindowOpener(final Window window, final String title, final String message) { return new WindowOpener(window, title, message); } private WindowOpener(final Window window, final String title, final String message) { super(title); setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); if (window instanceof JFrame) { final JFrame frame = (JFrame)window; frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); } final JPanel panel = new JPanel(new BorderLayout()); setContentPane(panel); panel.setBorder(BorderFactory.createEmptyBorder(10, 5, 10, 5)); final JXBusyLabel busyLabel = new JXBusyLabel(new Dimension(16, 16)); busyLabel.setBusy(true); panel.add(busyLabel); panel.add(new JLabel(message)); GroupLayouts.makeColumns(LayoutStyle.getInstance(), panel, 2); setMinimumSize(new Dimension(title.length() * 15 + 40, 70)); pack(); SwingUtil.setLocationCentre(this); setVisible(true); SwingUtil.dispose(window); } public void addOpeningWindow(final Window window) { Invoke.later(() -> { if (window.isVisible()) { setVisible(false); window.removeWindowListener(this); } else { window.addWindowListener(this); } }); } @Override public void windowActivated(final WindowEvent e) { } @Override public void windowClosed(final WindowEvent e) { } @Override public void windowClosing(final WindowEvent e) { } @Override public void windowDeactivated(final WindowEvent e) { } @Override public void windowDeiconified(final WindowEvent e) { } @Override public void windowIconified(final WindowEvent e) { } @Override public void windowOpened(final WindowEvent e) { final Window window = e.getWindow(); window.removeWindowListener(this); SwingUtil.dispose(this); } }