Qué hacer si el menú contextual se sale de la pantalla
Artículo por Club Developers · 01 junio 2006
2046 vistas
JDK 1.3 y anteriores:
Cuando usamos el método show(java.awt.Component, int, int) para mostrar un javax.swing.JPopupMenu, las coordenadas de "inicio de despliegue" del menú corresponden a la esquina superior izquierda. Si estas coordenadas están demasiado cercas del borde de la pantalla, veremos que parte del menú no se visualiza. Para poder arreglar el problema, tenemos que sobrecargar el método show() y corregir las coordenadas si estamos cerca del borde de la pantalla.
JDK 1.4:
Este bug ya ha sido corregido y no hace falta realizar nada.
Cuando usamos el método show(java.awt.Component, int, int) para mostrar un javax.swing.JPopupMenu, las coordenadas de "inicio de despliegue" del menú corresponden a la esquina superior izquierda. Si estas coordenadas están demasiado cercas del borde de la pantalla, veremos que parte del menú no se visualiza. Para poder arreglar el problema, tenemos que sobrecargar el método show() y corregir las coordenadas si estamos cerca del borde de la pantalla.
java
/** Dimension de la pantalla */ /** Dimension del Menu popup */ /** Posición x,y del popup en pantalla */ double xPopupDisplay = invoker.getLocationOnScreen().getX() + x; double yPopupDisplay = invoker.getLocationOnScreen().getY() + y; /** si el popup se sale de la pantalla por la derecha, decrementamos la x */ if ((xPopupDisplay + popupSize.getWidth()) > screenSize.getWidth()) { x = x - (int)popupSize.getWidth(); } /** si el popup se sale por debajo, decrementamos la y */ if ((yPopupDisplay + popupSize.getHeight()) > screenSize.getHeight()) { y = y - (int)popupSize.getHeight(); } /** mostramos el popup */ super.show(invoker, x, y); } }
JDK 1.4:
Este bug ya ha sido corregido y no hace falta realizar nada.