我首先寫的代碼,並要求下面簡單的按鈕代碼使用接口
下面我的問題是我的主類
public class Application {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
runApp();
}
});
}
public static void runApp() {
Model model = new Model();
View view = new View(model);
Controller controller = new Controller(view, model);
view.setLoginListener(controller);
}
}
下面是我的另一個類
public class LoginFormEvent {
private String name;
private String password;
public LoginFormEvent(String name, String password) {
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
下面是我的控制器類別
public class Controller implements LoginListener {
private View view;
private Model model;
public Controller(View view, Model model) {
this.view = view;
this.model = model;
}
@Override
public void loginPerformed(LoginFormEvent event) {
System.out.println("Login event received: " + event.getName() + "; " + event.getPassword());
}
}
下面是我LoginListener接口
public interface LoginListener {
public void loginPerformed(LoginFormEvent event);
}
最後下面是我剛纔刪除的JFrame代碼爲簡單起見我的視圖類。
public class View extends JFrame implements ActionListener {
private Model model;
private JButton okButton;
private JTextField nameField;
private JPasswordField passField;
private LoginListener loginListener;
@Override
public void actionPerformed(ActionEvent e) {
String password = new String(passField.getPassword());
String name = nameField.getText();
fireLoginEvent(new LoginFormEvent(name, password));
}
public void setLoginListener(LoginListener loginListener) {
this.loginListener = loginListener;
}
public void fireLoginEvent(LoginFormEvent event) {
if(loginListener != null) {
loginListener.loginPerformed(event);
}
}
}
這是一個標準的按鈕協調代碼,所以你們可能甚至不需要閱讀我的代碼來回答我的問題。
所以我知道如何編寫這段代碼,這就是我想要一個按鈕來調用某個動作時的編寫方式。但是當我試圖理解它的邏輯以理解它爲什麼起作用時,我感到非常困惑。
所以當我打電話view.setLoginListener(controller)
我顯然期待某種LoginFormEvent。
然後當我點擊按鈕,在view
類,new LoginFormEvent
構造。
但隨後又是怎樣的看法類中構造LoginFormEvent
可以在真正有沒有不同之處在於我已經在應用類中定義view.setLoginListener(controller)
兩個類之間的任何連接設置爲預期LoginFormEvent
的控制器類的參數。這隻會讓特定的視圖實例的setLoginListener期待某種LoginListener,這意味着它並不一定是我單擊按鈕時在視圖類中設置的那個。但顯然它必須是因爲這就是代碼的運行方式。但爲什麼?
您將不得不編輯最後一段才能使其易於理解。現在這是一個巨大的磨合句,我無法理解。 – gla3dr
對不起,我可能過於沮喪,我的邏輯是否更有意義? – Jchoi