2010-04-13 36 views
6

Tôi có một JDialog lấy tên từ người dùng. Đằng sau JDialog, là một applet. Tôi không muốn người dùng truy cập vào applet đó cho đến khi anh ta nhập tên. Tôi đã thử JDialog.setAlwaysOnTop(true), nhưng applet ném một lỗi AccessException. Vì vậy, những gì tôi đã làm là giữ một vòng lặp while sẽ thực hiện JDialog.setVisible(true) cho đến khi JtextField (đầu vào cho tên người dùng) trống (""). Nhưng đối với một số lý do này hoạt động thực sự chậm, có nghĩa là tải trọng JDialog, nhưng phải mất thời gian để tập trung vào JTextField và ngay cả khi người dùng nhập tên của mình, nó đến rất chậm ... như một nhân vật trong 2 giây ... bất kỳ cách nào khác cho tôi để buộc người dùng nhập tên trước khi truy cập vào applet?cách đảm bảo rằng JDialog luôn ở trên đầu trang

Trả lời

10

Sử dụng phương thức JDialog. Ví dụ: mã trong phương thức init (...) của JApplet của bạn có thể bao gồm:

JDialog dialog = new JDialog(SwingUtilities.windowForComponent(this)); 
dialog.setModal(true); 
dialog.setSize(...); 
dialog.setVisible(true); 

Hoặc bạn chỉ có thể sử dụng JOptionPane.showInputDialog(). Một lần nữa, bạn chỉ cần chỉ định "this" làm thành phần cha của cửa sổ tùy chọn.

+0

chỉ là những gì tôi đang tìm kiếm. Cảm ơn. – mithun1538

+0

Nhưng có một vấn đề. ActionListeners không còn đáp ứng. Và cũng có thể, người dùng có thể đóng hộp thoại (có một x ở phía trên bên phải của hộp thoại). Có bất kỳ điều gì tôi cần khôi phục sau khi người dùng đã nhập tên không? – mithun1538

+0

Nếu bạn không muốn người dùng có thể đóng hộp thoại thì sử dụng: dialog.setDefaultCloseOperation (...); – camickr

0

Nó chạy chậm vì chương trình đang xử lý mà foo loop

gì bạn có thể làm là thêm một người biết lắng nghe cửa sổ và sau đó là JDialog mất nó tập trung (hoặc applet giành nó) trả lại tập trung vào các JDialog.

Điều này sẽ hoạt động tốt hơn nhiều so với vòng lặp bạn đang sử dụng ngay bây giờ

+0

Nếu ModalityTypes hoạt động cho applet, tôi sẽ đề xuất thay vào đó. Tôi không có thời gian để tìm hiểu, mặc dù. –

+0

Tôi đã thêm một FocusListener vào JDialog và đã viết nội dung cho hàm focusLost() trong đó. Tuy nhiên, nó dường như không hoạt động. Nếu người dùng nhấp vào bên ngoài JDialog, nó sẽ không hiển thị lại. Tôi nghĩ rằng việc nhấp vào bên ngoài JDialog không làm cho JDialog mất tập trung, nó chỉ bị ẩn đi. – mithun1538

+0

mmhhh, bạn có thể đăng một số mã mẫu không? – OscarRyz

1

Một lựa chọn khác sẽ là:

frame.setAlwaysOnTop(true); 

Nó buộc hộp thoại trên đầu trang của bất kỳ khác.

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