Tengo una ventana emergente que se muestra cuando un usuario hace clic en un botón. Me gustaría ocultar la ventana emergente cuando ocurra cualquiera de los siguientes eventos:¿Cómo se oculta un elemento emergente de Swing cuando se hace clic en otro lugar?
- El usuario hace clic en otro lugar de la aplicación. (El panel de fondo, por ejemplo)
- El usuario minimiza la aplicación.
El JPopupMenu tiene este comportamiento, pero necesito algo más que JMenuItems. El siguiente bloque de código es una ilustración simplificada para demostrar el uso actual.
import java.awt.*;
import java.awt.event.ActionEvent;
import javax.swing.*;
public class PopupTester extends JFrame {
public static void main(String[] args) {
final PopupTester popupTester = new PopupTester();
popupTester.setLayout(new FlowLayout());
popupTester.setSize(300, 100);
popupTester.add(new JButton("Click Me") {
@Override
protected void fireActionPerformed(ActionEvent event) {
Point location = getLocationOnScreen();
int y = (int) (location.getY() + getHeight());
int x = (int) location.getX();
JLabel myComponent = new JLabel("Howdy");
Popup popup = PopupFactory.getSharedInstance().getPopup(popupTester, myComponent, x, y);
popup.show();
}
});
popupTester.add(new JButton("No Click Me"));
popupTester.setVisible(true);
popupTester.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Esta es una buena solución. Agregar la interfaz WindowFocusListener al Popup hace el truco. Terminé usando una JWindow en lugar de un JDialog porque no quería las decoraciones de la ventana. Publicaré la solución final. –