Que muestra la ficha anterior de CardLayout
-
10-10-2019 - |
Pregunta
Estoy teniendo problemas para averiguar éste hacia fuera.
La situación no es difícil imaginar lo que espero que pude publicar esto sin un código de ejemplo. Tengo JPanel con CardLayout. El panel contiene varios otros paneles como fichas individuales. Lo que estoy tratando de achive es crear un JButton que hará la demostración del panel principal pestaña abrió por última vez (la anterior a la actual fue mostrado). No es gran cosa que pensé al principio.
Así que comenzó por pensar cómo conseguir la pestaña visible actual (el panel) y descubrió que no existe un método nativo para que en el Panel o más bien CardLayout que sólo contiene métodos primero (), pasado (), next () y anterior () que son inútiles para mí.
A continuación, pensé que a lo mejor a achive mi objetivo que podría ir a través de todos los componentes del panel principal y de prueba que uno es visible lo que sería la actual. Me resulta un poco complicado, muy bien, pero ¿cómo puedo hacer que esta demostración del panel por CardLayout si no tengo su nombre tarjeta para llamar al método CardLayout espectáculo (padre, nombre)?
En este punto, no tengo ni idea. He estado buscando a través de Internet, pero no han encontrado una solución, solo que pocas personas han estado tratando de encontrar algo similar. Así que espero que alguien que ya begrenset con este tipo de problema se encuentra con este tema: -)
Gracias por cualquier sugerencia.
Saludos
Martin S.
Solución
Esto nos lleva a la cuestión de cómo llegó a la tarjeta actual en el primer lugar. Si utilizó next()
para llegar a la tarjeta actual, entonces previous()
para poder llegar a la tarjeta anterior y viceversa. Si utiliza first()
o last()
, entonces estás de suerte.
Por supuesto, siempre se puede duplicar parte de la información almacenada por el CardLayout
para lograr su objetivo: si se mantiene una serie de nombres de los componentes (y actualizarlo cada vez que llame addLayoutComponent
), así como un índice anterior (y actualizar esta con next
, previous
y otras llamadas), a continuación, puedes buscar el nombre del componente y el uso previo show
para mostrar la tarjeta anterior.
Actualización: Ya que sabes los nombres de ficha, aquí es cómo se puede mantener el nombre de la ficha anterior:
String prevTab, curTab;
public void showTab(String newTab) {
prevTab = curTab;
curTab = newTab;
layout.show(parent, curTab);
}
public void goBack() {
layout.show(parent, prevTab);
}
Otros consejos
Se puede crear un mapa de correlación de objetos. Y añadir paneles y nombres a disposición de la tarjeta y el mapa. Después, si usted tiene la JPanel mostrado anteriormente, se obtiene su nombre del mapa a través de map.get (JPanel p). Y para encontrar lo que JPanel era visible antes del momento, tendrá que añadir a cada ComponentListener JPanel. Y hacer que cambie alguna variable estática en caso componentHidden (por ejemplo estática JPanel prev_shown).