¿Es posible obtener la primera carta en CardLayout de Java? He intentado recorrer cada componente para verificar la visibilidad con isVisible() pero parece que todos son "visibles".Cómo obtener la primera carta en CardLayout de Java
Editar: Por "tarjeta superior" me refiero a la que está actualmente en la "parte superior", que se muestra, no la primera o la última carta. Además, no sé si ayuda, pero estoy buscando un JPanel (o una subclase de los mismos)
Editar: Fragmento de código
for (Component component : getComponents()) {
if (component instanceof JPanel && component.isVisible()) {
currentPanel = (JPanel) component;
System.out.println(currentPanel.getClass().getName());
}
}
El código anterior siempre se imprime el nombre de cada clase de componente, independientemente de si son la tarjeta visible o no.
Editar: Estoy usando esto como parte de una tarea escolar. No estoy tratando de obtener un regalo de promoción aquí, la tarea no gira en torno a este diseño. Simplemente parece ser el diseño más conveniente para cambiar entre paneles. Mi profesor ha especificado que no debe haber código de terceros en el proyecto. He visto la implementación desde el enlace de Camickr antes, pero no puedo usarlo. Puedo implementar funciones similares de forma flexible y tal vez darle una referencia en la documentación, pero no puedo simplemente descargarlo y usarlo.
Editar: La razón por la que trato de obtener la primera carta es porque tengo una barra de herramientas con un botón "Agregar". En lugar de tener un botón para agregar para cada una de mis dos cosas posibles, quería que supiera qué agregar simplemente mirando qué panel se está viendo actualmente. Si hay otra forma más adecuada de hacerlo, házmelo saber.
Editar: Gracias a todos por su ayuda. Me di cuenta de cuál era el problema. Supongo que fue mi culpa ya que no proporcioné suficientes detalles. Dos de mis cartas son JScrollPane
sy también necesitaba revisar su contenido para ver si uno de esos paneles era el que estaba viendo. No comprueve el isVisible()
en el panel de desplazamiento en sí, lo he estado viendo y afirma que siempre está visible, fue el panel de desplazamiento cuya visibilidad necesitaba verificar.
public JPanel getCurrentPanel() {
JPanel currentPanel = null;
for (Component component : getComponents()) {
if (component.isVisible()) {
if (component instanceof JPanel)
currentPanel = (JPanel) component;
else if (component instanceof JScrollPane)
currentPanel = (JPanel) ((JScrollPane) component).getViewport().getComponent(0);
}
}
return currentPanel;
}
@RD, el fragmento de código proviene de un intento de un método 'getCurrentPanel()' en JPanel que usa CardLayout. He extendido JPanel por otros motivos, así que tengo acceso a él. – alexcoco
Bueno, sin ver todo tu código, no puedo decirte lo que está pasando mal, pero puedo decirte que mi código TestFrame encuentra correctamente solo una tarjeta visible a la vez. –
@alexcoco, editado para poner el código relevante en un método getCurrentCard(). –