2010-01-19 14 views
5

Belirli koşullar altında, kullanıcı belirli bilgi sağlayıncaya kadar bir bölmede kalmak için bir JTabbedPane'e ihtiyacım var. Esasen, bu durum meydana geldiğinde, mevcut panele modal olmak için ihtiyacım var.JTabbedPane'in bir bölmesinde nasıl donabilirim?

Bunu nasıl uygulayabilirim? Bölme değiştiğinde hangi olayın tetiklendiğini yakalayabileceğimi düşünüyordum ve yapışmak istediğim bölüme geri dönüyorum. Ama bu oldukça doğru olmayacak endişe duyuyorum, olay gerçekte ne zaman olay sonra bölme geçiş yapmak için ne zaman bağlı olarak, ben bölmesini istediğim bölüme veya başka bir şekilde ayarlamak için yöntem çağrısı benzer yarış durumu. Daha iyi bir yolu var mı? Bu yaklaşımı yapabileceğim bir yol var mı?

+0

JDialog veya JOptionPane kullanamazsınız? – ChadNC

+0

@ChadNC, Bunu düşündüm ve aslında bu seçeneği tercih ederim, ancak bu durumda kullanıcının donma ihtiyacım olan koşulları ortadan kaldırmak için koşulları değiştirmek için bu bölüme adımlar atması gerekiyor. Ve bu durumu kontrol edebilmek için, o bölmedeki denetimleri kullanarak birden çok yolu vardır. Modal bir iletişim kutusu açarsam, tüm bu denetimlere erişimi kaybeder. – skiphoppy

cevap

6

Diğer sekmelerin devre dışı bırakılmasını öneririm. Bu, kullanıcının sekmeden çıkamayacağı geri bildirimini sağlamanın olumlu bir etkisine sahiptir. Aksi halde çılgınca tıklayabilir ve neden sekmeden çıkmasına izin vermeyeceğini merak edebilirler.

Sadece gerekli alanlar tamamlandıktan sonra tekrar etkin olarak ayarlayın. tüm alanları doğru ayarlanmış (ya da her türlü koşul)

+1

Ayrıca, kullanıcılara neleri düzeltmeleri gerektiğini açıkça belirtin. Çok fazla şeyleri daha fazla hayal kırıklığına uğrattığımı anlayamıyorum, çünkü nasıl girdiğini bilmediğim bir giriş için bekleyen modal bir şey üzerinde sıkışmış olmak. – TwentyMiles

+0

@TwentyMiles Yup, Genelde kırmızı veya sarı olan alanı vurgularım. –

+0

Bu benim kabul edilen cevabım, fakat diğerlerinin parçalarını kullandım; bilhassa, setEnabledAt() yöntemine beni (JavaDocs okuma konusunda oldukça yetkin olmasına rağmen, kendi başıma bulamamıştım) ve Carlos'un çözümü neredeyse benim için işe yarayan ve iyi bir durma yaptıran ChadNC oldu. temel kavram çalışmasını sağlayan çözüm. – skiphoppy

2

sadece JTabbedPane devre dışı JTabbedPanes. Sekmeli bölmeleri kullanmanız gerektiğinden, bu sekme kullanılarak kullanıcının bu sekmede kalmasını sağlamak istediğiniz koşulu yerine getirdikten sonra, sekmenin seçili olanı olmasını öneririz.

setTabComponentAt(int index, Component component) 

veya

setSelectedIndex(int index) 

Set kullanıcı bunu yapmalarını ve diğer tüm sekmeleri setEnabledAt(int index, boolean enabled) kullanılarak devre dışı olmasını istediğiniz ne olursa olsun tamamlayarak kadar devam edememesi gerekir belirten bir bayrak. Kullanıcı, bayrağı uygun şekilde ayarlamak ve diğer sekmeleri yeniden etkinleştirmek için ihtiyaç duydukları şeyi tamamladıktan sonra.

Bu çözümü denemek için zamanım olmadı ama işe yarayacağını düşünüyorum.

+0

Çok havalı! Geçerli sekmeyi grileştirdiği için biraz kapalı, ancak geçerli bölme etkin durumda, bu yüzden çalışıyor. Sanırım her bir sekmeyi devre dışı bırakmaya çalışacağım, eğer doğru şekilde çalıştırabilirsem. – skiphoppy

+1

@skiphoppy - geçerli sekmeyi gri yapmak istemiyorsanız, @Chris çözümleri ile gidebilirsiniz: 'JTabbedPane kullanın.setEnablebAt (int, boolean) 'her bir sekmeyi fakat akımı devre dışı bırakmak için. –

2

Kullanılacak istediğini yapmak JPanels birlikte CardLayout kullanıp edemeseydik

pane.setEnabled(false); 

ve etkinleştirmek:

İlgili konular