2012-04-09 6 views
5

Ho qualche convalida che eseguo quando l'utente fa clic su una scheda. Se convalida == true, consenti alla scheda di mostrare (o di passare a). In questo momento sto usando l'evento StateChanged per convalidare. Il problema è che quando fai clic su una scheda mostra il contenuto delle schede e se la convalida == false torna alla scheda precedente. Non voglio che passi a niente se non convalida == true. Come faccio questo, sto verificando un evento sbagliato? Grazie a tuttiJava JTabbedPane consente Tab per passare solo se true

+4

Il modo UI/UX ideale per fare ciò sarebbe "disabilitare" la scheda in questione usando 'pane.setEnabledAt (index, false);' chiama invece di logica convoluta nell'evento 'stateChanged'. –

+3

È possibile avvicinarsi a questo utilizzando un 'CardLayout' invece del' JTabbedPane' - per il controllo completo di quando le viste cambiano. JTabbedPane 'utilizzare una' scheda bloccata 'sarebbe contro-intuitivo per me. –

risposta

1

Provate a sovrascrivere JTabbedPane.setSelectedIndex (int index).

+0

La soluzione di pulitura può essere quella di sovrascrivere 'DefaultSingleSelectionModel.setSelectedIndex (index)' e utilizzare il modello per JTabbedPane. La soluzione più pulita sarebbe quella di sovrascrivere 'DefaultSingleSelectionModel' per supportare' VetoableChangeListener'. – xmedeko

+0

Assolutamente d'accordo: la soluzione xmedeki è saffer. – Zecas

3

È possibile utilizzare il metodo tab.setEnabledAt (index, false) per disabilitare la scheda se validation = false e tab.setEnabledAt (index, true) per riattivarlo quando validation = true.

Modifica: la disattivazione di una scheda viene visualizzata in grigio in modo che l'utente non possa fare clic in primo luogo, il che significa che si dovrà eseguire il controllo di convalida prima che l'utente faccia clic sulla scheda.

Problemi correlati