2012-04-09 34 views
5

Tôi có một số xác thực mà tôi thực hiện khi người dùng nhấp vào một tab. Nếu xác thực == true thì cho phép tab hiển thị (hoặc chuyển sang). Ngay bây giờ tôi đang sử dụng sự kiện StateChanged để xác thực. Vấn đề là, khi bạn bấm vào một tab nó sẽ hiển thị các nội dung của tab và nếu xác nhận == false nó sẽ chuyển về tab trước đó. Tôi không muốn nó chuyển sang tất cả trừ khi xác nhận == đúng. Làm thế nào để làm điều này, tôi đang kiểm tra cho một sự kiện sai? Cảm ơn tất cả các bạnJava JTabbedPane cho phép Tab chuyển sang chỉ khi đúng

+4

Cách UI/UX lý tưởng để thực hiện việc này sẽ là "vô hiệu hóa" tab đang được đề cập bằng cách sử dụng lệnh 'pane.setEnabledAt (index, false);' thay vì logic phức tạp trong sự kiện 'stateChanged'. –

+3

Bạn có thể tiếp cận điều này bằng cách sử dụng 'CardLayout' thay vì' JTabbedPane' - để kiểm soát hoàn toàn thời điểm các lượt xem thay đổi. Sử dụng 'tab bị khóa' 'JTabbedPane' sẽ phản trực giác với tôi. –

Trả lời

1

Thử ghi đè JTabbedPane.setSelectedIndex (chỉ mục int).

+0

Giải pháp sạch hơn có thể là ghi đè 'DefaultSingleSelectionModel.setSelectedIndex (index)' và sử dụng mô hình cho JTabbedPane. Tuy nhiên, giải pháp sạch hơn sẽ được ghi đè lên 'DefaultSingleSelectionModel' để hỗ trợ' VetoableChangeListener'. – xmedeko

+0

Hoàn toàn đồng ý: giải pháp xmedeki là saffer. – Zecas

3

Bạn có thể sử dụng phương thức tab.setEnabledAt (chỉ mục, sai) để tắt tab nếu validation = false và tab.setEnabledAt (index, true) để bật lại khi xác thực = true.

Chỉnh sửa: Vô hiệu hóa tab sẽ chuyển sang màu xám để người dùng không thể nhấp vào nó ở nơi đầu tiên, có nghĩa là bạn sẽ phải thực hiện kiểm tra xác thực trước khi người dùng nhấp vào tab.

Các vấn đề liên quan