有兩個 Java 類:MyFrame.java 和 Register.java。在 MyFrame 中 new Register() 對象,嘗試通過 register.getRadio().getText() 獲取 Register 界面中 ButtonGroup 內選中的單選按鈕(男/女)文本,但報錯失敗。
MyFrame 中創建的 Register 對象可能只是數據容器,並非用戶正在交互的可視界面實例在 Register 類中定義接口,選擇發生時通知調用者:
// Register.java
public interface GenderSelectionListener {
void onGenderSelected(String gender);
}
private GenderSelectionListener listener;
public void setGenderSelectionListener(GenderSelectionListener listener) {
this.listener = listener;
}
// 在單選按鈕動作監聽器中
radioButton.addActionListener(e -> {
if (listener != null) {
listener.onGenderSelected(getSelectedGender());
}
});
private String getSelectedGender() {
return maleRadio.isSelected() ? "男" : "女";
}
MyFrame 實現接口並註冊:
// MyFrame.java
register.setGenderSelectionListener(gender -> {
this.selectedGender = gender;
// 更新 UI 或業務邏輯
});
若 Register 是對話框,使用 JDialog 模態顯示:
// Register 繼承 JDialog
public String showDialogAndGetGender() {
setVisible(true); // 阻塞直到關閉
return selectedGender; // 關閉前設置
}
// MyFrame 中調用
String gender = register.showDialogAndGetGender();
創建獨立的 UserModel 類持有性別屬性,兩界面共享同一模型實例:
public class UserModel {
private String gender;
// getter/setter + PropertyChangeSupport
}
// 兩界面注入同一 UserModel 實例
// Register 界面綁定單選按鈕到 model.gender
// MyFrame 直接讀取 model.getGender()
「誰負責顯示界面,誰負責收集用戶輸入,通過定義良好的接口傳遞數據」
遵循這一原則,可構建低耦合、可測試、可維護的 Swing 應用。