2010-01-19 24 views
5

En determinadas circunstancias, necesito un JTabbedPane para permanecer en un panel hasta que el usuario proporcione cierta información. Esencialmente, cuando ocurre esta circunstancia, necesito que el panel actual se convierta en modal.¿Cómo puedo congelar en un panel de un JTabbedPane?

¿Cómo puedo implementar esto? Estaba pensando que podría detectar cualquier evento que se active cuando el panel cambie, y reiniciar de nuevo al panel en el que quiero pegarme. Pero me preocupa que esto no sea del todo correcto, que dependiendo de cuándo se produzca el evento, la transición al nuevo panel se realizará después de Llamaré al método para establecer el panel en el panel que quiero, o alguna otra condición de carrera similar. ¿Hay una mejor manera? ¿Hay alguna forma en que pueda hacer que este enfoque funcione?

+0

No puede usar un JDialog o JOptionPane? – ChadNC

+0

@ChadNC, pensé acerca de eso, y que en realidad prefiere esa opción, pero en este caso, el usuario debe tomar medidas en este panel para cambiar las circunstancias para eliminar la condición de que necesito para congelar. Y hay varias formas en que pueden aliviar esa condición, usando los controles en ese panel. Si aparece un cuadro de diálogo modal, pierden el acceso a todos esos controles. – skiphoppy

Respuesta

6

Sugeriría configurar las otras pestañas como deshabilitadas. Esto tiene un efecto positivo al proporcionar al usuario comentarios de que no puede hacer clic fuera de la pestaña. De lo contrario, pueden estar haciendo clic locamente y preguntándose por qué no les permitirá salir de la pestaña.

Simplemente configúrelos nuevamente habilitados después de completar los campos requeridos.

+1

También aclare al usuario lo que debe corregir. No puedo pensar en muchas cosas más frustrantes que estar atrapado en un tema modal que está esperando alguna entrada que no sé cómo ingresar. – TwentyMiles

+0

@TwentyMiles Sí, usualmente resalto el campo rojo o amarillo ... que lo destaque. –

+0

Esta es mi respuesta aceptada, pero utilicé piezas de todas las demás; en particular, era ChadNC que me dio un indicio en el método setEnabledAt() (que yo no era capaz de encontrar por mi cuenta, a pesar de ser bastante competente en JavaDocs lectura), y la solución Carlos' casi funcionó para mí e hizo un buen substituto solución para hacer funcionar el concepto básico. – skiphoppy

2

simplemente desactivar el JTabbedPane:

pane.setEnabled(false); 

y habilitarlo si todos los campos están configurados correctamente (o cualquier condición)

+0

¡Genial! Ligeramente apagado porque se pone gris en la pestaña actual, pero el panel actual permanece activo, por lo que funciona. Sin embargo, creo que intentaré desactivar cada pestaña individual, si puedo resolverlo correctamente. – skiphoppy

+1

@skiphoppy - si no quiere oscurecer la pestaña actual, puede ir por soluciones @Chris: use 'JTabbedPane.setEnablebAt (int, boolean) 'para desactivar cada pestaña, excepto la actual. –

2

Se puede usar un CardLayout junto con JPanels a hacer lo que quiera y no utilizar JTabbedPanes. Como necesita utilizar los paneles con pestañas, le sugiero que una vez que se haya alcanzado la condición de que desea obligar al usuario a permanecer en esa pestaña, configure esa pestaña para que sea la seleccionada con.

setTabComponentAt(int index, Component component) 

o

setSelectedIndex(int index) 

Establecer una bandera que indica que el usuario no debe ser capaz de continuar hasta completar lo que sea que quiere que hagan y tienen todas las otras fichas ser desactivadas mediante setEnabledAt(int index, boolean enabled) . Una vez que el usuario ha completado lo que necesitaba para continuar configurando la bandera en consecuencia y volver a habilitar las otras pestañas.

No tengo tiempo para probar esa solución, pero creo que debería funcionar.

Cuestiones relacionadas