Tôi thấy đoạn mã sau vào một dự án GUI/Swing Java:Mã Swing này hoạt động như thế nào?
MyDialog dlg = new MyDialog(parent, isFizz);
MyDialogResults results = dlg.getResults();
eventBus.fireEvent(new MyDialogEvent(results));
Trong đoạn mã trên, MyDialog extends JDialog
. Vì vậy, rõ ràng, một hộp thoại con đang được xây dựng (và bằng cách nào đó được hiển thị cho người dùng cuối), sau đó khi người dùng thoát hộp thoại (bằng cách nhấp vào OK hoặc một số nút khác), một hạt results
được sử dụng để kích hoạt sự kiện mới trong sự kiện xe buýt.
Nhưng tôi phải vật lộn với hai điều:
- Làm thế nào/nơi đang Java được nói để thực sự vẽ/hiển thị hộp thoại để người dùng ?; và
- Làm cách nào/ở đâu Java được yêu cầu treo/đợi người dùng thoát khỏi hộp thoại trước khi kích hoạt sự kiện lên xe buýt?
Có phải là con JDialog
sẽ luôn hiển thị hộp thoại khi JDialog
được tạo và không trả về từ hàm tạo cho đến khi hộp thoại thoát ra? Dưới đây là tóm tắt của HTE MyDialog
constructor với phần trên:
public class MyDialog extends JDialog {
private boolean isFizz;
private MyDialogResults results;
// Getters and setters for all properties...
public MyDialog(Frame parent, boolean isFizz) {
super(parent, "My Dialog", true);
setIsFizz(isFizz);
setVisible(true);
dispose();
}
}
Cảm ơn trước sự giúp đỡ nào/cái nhìn sâu sắc với sự hiểu biết như thế nào hộp thoại mở ra, "treo" (mặc dù tôi biết nó không thực sự treo/đông lạnh), đóng lại, và sau đó kích hoạt sự kiện.
Cảm ơn @Andrew Thompson (+1) - tuy nhiên đối với # 2 tôi vẫn còn bối rối. Theo [constructor Javadoc] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JDialog.html#JDialog%28java.awt.Dialog,%20java.lang.String,% 20boolean% 29) đặt 'modal' thành true only" 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ị ". Nhưng đó không giống như những gì tôi mô tả ở đây. Tôi không tin rằng điều đó sẽ ngăn chặn dòng mã tiếp theo ('MyDialogResults results = dlg.getResults();') thực hiện cho đến khi hàm tạo hoàn thành, vì đó không phải là "đầu vào của người dùng". –
"true" trong cuộc gọi siêu làm cho các phương thức hộp thoại. Điều đó có nghĩa là cuộc gọi đến 'setVisible (true)' sẽ không trở lại cho đến khi hộp thoại được đóng lại. –
* "" 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ị "* ..và dừng dòng mã tiếp theo từ thực thi (là những gì nên được thêm vào đó). –