2009-05-22 55 views
5

Tôi đang sử dụng JFrame làm cửa sổ bật lên từ khung chính, nơi người dùng được yêu cầu nhập một số thông tin và sau đó nhấn OK. Nhưng vấn đề là một khi khung phụ này đã mở ra, tôi muốn chương trình bỏ qua bất kỳ tín hiệu nào khác cho đến khi nút OK được nhấn, tương tự như cách nó được thực hiện với JOptionPanes. Như bây giờ, bạn có thể nhấp vào nút để mở khung phụ nhiều lần, do đó nhận được một số khung hình, và đây không phải là ý định (nó gây ra rất nhiều lỗi ngay cả).JFrame trong Java

Tôi có thể giải quyết nó bằng boolean đúng khi nhấn nút OK, nhưng điều đó dường như không phải là cách hay để khắc phục. Tôi cảm thấy phải có một số cách khác để làm điều đó, thấy như tôi có thể thấy hiệu ứng tìm kiếm sau khi đến từ JOptionPanes của tôi, nhưng không thể có được nó.

Chúc mừng.

+0

Mats_SX từ Thụy Điển? Bạn không ở trên diễn đàn Paradox bởi bất kỳ cơ hội nào, đúng không? –

+0

Tôi rất nhiều. Thường xuyên OT và phần eu2 :) –

+0

Sau đó, bạn biết tôi đã (tôi sử dụng tên đầu tiên của tôi chứ không phải là tên cuối cùng của tôi ở đó). –

Trả lời

10

Bạn cần JDialog với modal = true. Từ Javadocs:

modal - chỉ định xem hộp thoại có chặn người dùng nhập vào các cửa sổ cấp cao nhất khác khi được hiển thị hay không.

+0

Vì vậy, không có cách nào cho tôi để làm điều này với một JFrame? –

+2

Không dễ dàng. Nhưng thực sự không có lý do gì để sử dụng JFrame tại đây; một JDialog có thể làm hầu như bất cứ điều gì một JFrame có thể, nó chỉ không được coi là một cửa sổ đầy đủ bởi hệ điều hành. Một JDialog có nghĩa là cho loại điều này (chỉ là một cửa sổ nhỏ để thu thập một số đầu vào). –

+0

Tôi sẽ nhớ điều đó. Chi tiết cho vấn đề là nó là một dự án cho trường học, và tôi là người quản lý dự án. Tôi đã không tự mình viết mã đó, tôi chỉ phải đối phó với lỗi mà nó gây ra lol. Vì vậy, tôi giả định rằng một JFrame là những gì đã được sử dụng, nhưng đối với các cuộc gặp gỡ trong tương lai với các nhiệm vụ tương tự, tôi sẽ sử dụng JDialog thay vào đó, sau đó. –

6

Chỉ cần thay đổi JFrame thành JDialog.

Sau đó, trong việc sử dụng constructor dòng này:

setModal(true); 

Ứng dụng của bạn sau đó sẽ chặn cho đến khi hộp thoại được đóng lại.

Bạn có thể muốn xem xét JOptionPane.showInputDialog() nếu người dùng của bạn chỉ cần nhập String.

+0

tốt, họ đang nhập ba Strings khác nhau, và có một số yêu cầu về những gì các dây được cho phép để trông giống như. –

+0

Với reqs tùy chỉnh như thế bạn có thể sẽ muốn thực hiện tùy chỉnh của riêng bạn JDialog – jjnguy

+0

bạn vẫn có thể làm điều đó với JOptionPane mặc dù. đối số "message" đối với JOptionPane là một đối tượng. nếu một chuỗi, nó sẽ hiển thị văn bản của chuỗi, nhưng bạn có thể vượt qua JComponent để nhận nội dung tùy chỉnh khác. Nhưng tôi đồng ý với "Sử dụng một JDialog phương thức, đó là những gì họ cho" câu trả lời ở trên. –