Feb 15
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 … 
February 16th, 2008 at 11:19 am
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
February 16th, 2008 at 1:24 pm
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.
February 17th, 2008 at 4:38 pm
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 ^^
February 17th, 2008 at 4:48 pm
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.
February 18th, 2008 at 9:09 am
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
February 18th, 2008 at 12:03 pm
Gracias, he puesto el comentario en el foro, para que la persona en cuestión pueda echarle un ojo.
Se bueno.