2012-04-09 6 views
5

Ich habe eine Validierung, die ich ausführen, wenn der Benutzer auf einen Tab klickt. Wenn validation == true, erlaube dem Tab zu zeigen (oder zu wechseln). Im Moment benutze ich das StateChanged-Ereignis zur Validierung. Das Problem ist, wenn Sie auf eine Registerkarte klicken, zeigt es die Tabs Inhalt und wenn Validierung == false es zurück zur vorherigen Registerkarte. Ich möchte nicht, dass es überhaupt umschaltet, es sei denn Validierung == wahr. Wie mache ich das, überprüfe ich nach einem falschen Ereignis? Vielen Dank alleJava JTabbedPane erlaubt Tab nur wenn true zu wechseln

+4

Der ideale UI/UX-Weg, um dies zu tun wäre, die betreffende Registerkarte zu deaktivieren mit 'pane.setEnabledAt (index, false);' Aufruf anstelle von gewundenen Logik in 'stateChanged' Ereignis. –

+3

Sie können dies mit einem 'CardLayout' anstatt dem' JTabbedPane' angehen, um zu kontrollieren, wann sich die Ansichten ändern. Die Verwendung eines "gesperrten Tabs" "JTabbedPane" wäre für mich kontraproduktiv. –

Antwort

1

Versuchen Sie, JTabbedPane.setSelectedIndex (int-Index) zu überschreiben.

+0

Die sauberere Lösung besteht möglicherweise darin, 'DefaultSingleSelectionModel.setSelectedIndex (index)' zu überschreiben und das Modell für JTabbedPane zu verwenden. Noch sauberere Lösung wäre, 'DefaultSingleSelectionModel' zu überschreiben, um' VetoableChangeListener' zu unterstützen. – xmedeko

+0

Absolut stimmen: xmedeki Lösung ist saffer. – Zecas

3

Sie können die Methode tab.setEnabledAt (index, false) verwenden, um die Registerkarte zu inaktivieren, wenn validation = false, und tab.setEnabledAt (index, true), um sie wieder einzuschalten, wenn validation = true ist.

Bearbeiten: Wenn Sie eine Registerkarte deaktivieren, wird sie grau dargestellt, sodass der Benutzer sie nicht an erster Stelle anklicken kann. Dies bedeutet, dass Sie die Validierungsprüfung durchführen müssen, bevor der Benutzer auf die Registerkarte klickt.

Verwandte Themen