2012-04-09 11 views
5

Tengo alguna validación que realizo cuando el usuario hace clic en una pestaña. Si la validación == verdadero, permite que se muestre la pestaña (o para cambiar). En este momento estoy usando el evento StateChanged para validar. El problema es que, al hacer clic en una pestaña, se muestran los contenidos de las pestañas y si la validación == falso vuelve a la pestaña anterior. No quiero que cambie a menos que validación == verdadero. ¿Cómo hago esto? ¿Estoy buscando un evento incorrecto? Gracias a todosJava JTabbedPane permite que la pestaña cambie solo si es verdadero

+4

La forma ideal de UI/UX para hacer esto sería "desactivar" la pestaña en cuestión utilizando la llamada 'pane.setEnabledAt (index, false);' en lugar de la lógica intrincada en el evento 'stateChanged'. –

+3

Puede acercarse a esto usando un 'CardLayout' en lugar del' JTabbedPane' - para un control completo cuando cambian las vistas. Usar una 'pestaña bloqueada' 'JTabbedPane' sería contra-intuitivo para mí. –

Respuesta

1

Pruebe omitir JTabbedPane.setSelectedIndex (índice int).

+0

La solución del limpiador puede ser anular 'DefaultSingleSelectionModel.setSelectedIndex (index)' y usar el modelo para JTabbedPane. Sin embargo, una solución más limpia sería anular 'DefaultSingleSelectionModel' para admitir' VetoableChangeListener'. – xmedeko

+0

Absolutamente de acuerdo: la solución xmedeki es más segura. – Zecas

3

Puede usar el método tab.setEnabledAt (index, false) para desactivar la pestaña if validation = false, y tab.setEnabledAt (index, true) para volver a activarla cuando validation = true.

Editar: Al deshabilitar una pestaña se atenúa para que el usuario no pueda hacer clic en ella, lo que significa que tendrá que realizar la verificación de validación antes de que el usuario haga clic en la pestaña.

Cuestiones relacionadas