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
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.
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ờ
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ù. –
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
mmhhh, bạn có thể đăng một số mã mẫu không? – OscarRyz
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.
chỉ là những gì tôi đang tìm kiếm. Cảm ơn. – mithun1538
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
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