Suelo visitar y participar en varios foros de java. Algunas preguntas son realmente curiosas, pero esta pregunta me ha llamado la atención. ¿Cómo se puede desplegar un Combo hacia arriba?. Será cuestión de investigarlo un poco …
Búsqueda
Anteriores
Categorías
Blogroll
Mis otros sitios
referidos
Hola,
No es un tema muy trivial, pero os puedo dar un par de pistillas …
Se trata de definirle un UI (ComboxUI), que por ejemplo podéis pasarle en el constructor de vuestro combo:
MyCombo()
{
super();
setUI(MyComboUI());
}
….
este MyComboUI deberá extender del UI habitual para los combos, MetalComboBoxUI(), y deberá sobrescribir los métodos relativos a la gestión del popup:
createPopup()
y utilizar un popup propio que extienda del de por defecto.
Esto es así, porque al contrario de lo que podría parecer, el popup no se distara por orden del combo, sino que el llamado arrowButton del combo (creado por la clase ComboBoxUI), es escuchado desde el popup, es decir, java establece al popup como listener del botón y panel del combo para hacerlo visible cuando actúas sobre él, y por ello para este tipo de manipulaciones debes terminar creando un popup propio que extienda del original, y alterando su setVisible(boolean) para modificar sus coordenadas gráficas.
Siento que por falta de tiempo , no poder «ejemplificaros» mejor, pero si podéis echarle un vistazo a los fuentes de java, veréis que es muy fácil, no difícil es llegar a ese punto (ya que lo normal es pensar que el combo maneja al popup, y no que éste actúe por iniciativa propia).
Un saludo,
DaniP
Muchas gracias, DaniP. Veo que te gusta meterte en las «interioridades» del código java. A ver si encuentro yo también algo de tiempo y me «sumerjo hasta el fondo». Gracias de nuevo.
Se bueno.
Vaya… yo iba a decir que había que darle la vuelta al monitor, pero veo que se me adelantan con una respuesta de verdad ^^
Uy, en el ordenador que tengo en el trabajo no hace falta. Basta con pulsar a la vez Ctrl-Alt-Flecha arriba y toda la imágen de la pantalla se pone boca abajo.
De todas formas, lo propongo como reto. A ver quién es el primero que pone un trozo de código que haga eso exactamente. Incluso podeis contestarlo en el foro en cuestión 😉
Sed buenos.
Bueno…
Ahora que tengo un poquito más de tiempo te completo con que la clase MyPopup que extienda de BasicComboPopup, deberá sobreescribir el método computePopupBounds, para darle la vuelta a las coordenadas que devolvería la llamada al super, y así en lugar de que sea y=0, utilizas un y=-height, en el Rectangle que debes devolver.
Espero que os haya servido.
Un saludo,
DaniP
Gracias, he puesto el comentario en el foro, para que la persona en cuestión pueda echarle un ojo.
Se bueno.