2010-01-19 38 views
5

Trong một số trường hợp nhất định, tôi cần một JTabbedPane duy trì trên một ngăn cho đến khi người dùng cung cấp một số thông tin nhất định. Về cơ bản, khi tình huống này xảy ra, tôi cần cửa sổ hiện tại để trở thành phương thức.Làm thế nào tôi có thể đóng băng trên một cửa sổ của JTabbedPane?

Làm cách nào để triển khai tính năng này? Tôi đã nghĩ rằng tôi có thể bắt bất cứ sự kiện nào được kích hoạt khi cửa sổ thay đổi và đặt lại về cửa sổ mà tôi muốn bám vào. Nhưng tôi lo lắng rằng điều này sẽ không hoàn toàn đúng, tùy thuộc vào thời điểm sự kiện thực sự kích hoạt quá trình chuyển đổi sang ngăn mới sẽ xảy ra sau Tôi gọi phương thức để đặt ngăn cho ngăn tôi muốn hoặc một số khác tình trạng chủng tộc tương tự. Có cách nào tốt hơn? Có cách nào tôi có thể thực hiện phương pháp này không?

+0

Bạn không thể sử dụng JDialog hoặc JOptionPane? – ChadNC

+0

@ChadNC, tôi nghĩ về điều đó, và thực sự tôi thích tùy chọn đó, nhưng trong trường hợp này, người dùng cần thực hiện các bước trên ngăn này để thay đổi hoàn cảnh để loại bỏ tình trạng mà tôi cần đóng băng. Và có nhiều cách họ có thể làm giảm bớt tình trạng đó, bằng cách sử dụng các điều khiển trên ngăn đó. Nếu tôi bật lên một hộp thoại phương thức, họ sẽ mất quyền truy cập vào tất cả các điều khiển đó. – skiphoppy

Trả lời

6

Tôi khuyên bạn nên đặt các tab khác bị tắt. Điều này có tác động tích cực trong việc cung cấp phản hồi của người dùng rằng họ không thể nhấp vào tab. Nếu không, họ có thể điên cuồng nhấp vào và tự hỏi tại sao nó sẽ không cho phép họ rời khỏi tab.

Chỉ cần đặt chúng được bật lại sau khi các trường bắt buộc được hoàn tất.

+1

Cũng làm cho nó rất rõ ràng cho người dùng những gì họ cần phải sửa chữa. Tôi không thể nghĩ ra nhiều điều bực mình hơn khi bị mắc kẹt trên một thứ gì đó đang chờ đợi một số đầu vào mà tôi không biết cách vào. – TwentyMiles

+0

@TwentyMiles Yup, tôi thường làm nổi bật các lĩnh vực màu đỏ hoặc màu vàng .. làm cho nó nổi bật. –

+0

Đây là câu trả lời được chấp nhận của tôi, nhưng tôi đã sử dụng các phần của tất cả những người khác; đặc biệt, chính ChadNC đã đưa tôi vào phương thức setEnabledAt() (mà tôi không thể tìm thấy một mình, mặc dù khá thành thạo khi đọc JavaDocs), và giải pháp của Carlos gần như làm việc cho tôi và tạo ra một stopgap tốt giải pháp để có được khái niệm cơ bản làm việc. – skiphoppy

2

chỉ vô hiệu hóa các JTabbedPane:

pane.setEnabled(false); 

và kích hoạt nó nếu tất cả các lĩnh vực được thiết lập một cách chính xác (hoặc bất kỳ điều kiện)

+0

Khá tuyệt! Hơi tắt vì nó làm mờ tab hiện tại, nhưng ngăn hiện tại vẫn hoạt động, vì vậy nó hoạt động. Tôi nghĩ rằng tôi sẽ cố gắng để vô hiệu hóa từng tab riêng lẻ, mặc dù, nếu tôi có thể làm việc nó ra một cách chính xác. – skiphoppy

+1

@skiphoppy - nếu bạn không muốn làm xám tab hiện tại, bạn có thể đi theo giải pháp @Chris: sử dụng 'JTabbedPane.setEnablebAt (int, boolean) 'để vô hiệu hóa mỗi tab nhưng hiện tại. –

2

Bạn có thể sử dụng một CardLayout cùng với JPanels để làm những gì bạn muốn và không sử dụng JTabbedPanes. Vì bạn cần sử dụng các tab được gắn thẻ, tôi sẽ đề xuất rằng khi điều kiện đã đạt được mà bạn muốn buộc người dùng ở lại trên tab đó, hãy đặt tab đó thành tab được chọn bằng cách sử dụng.

setTabComponentAt(int index, Component component) 

hoặc

setSelectedIndex(int index) 

Đặt một lá cờ chỉ ra rằng người dùng không nên có thể tiếp tục cho đến khi hoàn thành bất cứ điều gì nó là bạn muốn họ làm và có tất cả các tab khác bị vô hiệu hóa sử dụng setEnabledAt(int index, boolean enabled) . Sau khi người dùng đã hoàn tất những gì họ cần để tiếp tục đặt cờ cho phù hợp và có thể bật lại các tab khác.

Tôi không có thời gian để thử giải pháp đó nhưng tôi nghĩ nó nên hoạt động.

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