java取消按钮_Java Swing-单击取消按钮时不循环
小編典典
在我最近從事的項目中,我實現了一個基于事件的解決方案。這個想法是JDialog通知其父級JFrame登錄過程如何進行的,而最后一個登錄名可能會也可能不會繼續執行。這樣,我就沒有循環并保持各自的職責:模式將是這樣的:
LoginEvent:這是事件本身。沒那么復雜:
class LoginEvent extends EventObject {
public static final int LOGIN_SUCCEEDED = 0;
public static final int LOGIN_FAILED = 1;
public static final int LOGIN_DIALOG_CLOSED = 2;
private int id;
public LoginEvent(Object source, int id) {
super(source);
this.id = id;
}
public int getId() {
return id;
}
}
LoginListener
處理這些LoginEvents的接口:
public interface LoginListener extends EventListener {
public void handleLoginEvent(LoginEvent evt);
}
登錄對話框
此類必須List訂閱一個LoginListeners:
class LoginDialog {
List listeners = new ArrayList<>();
JDialog dialog;
JButton accept;
JButton cancel;
public void show() {
//create and show GUI components
}
public void close() {
if(dialog != null) {
dialog.dispose();
}
}
...
public void addLoginListener(LoginListener loginEventListener) {
if(!listeners.contains(loginEventListener)) {
listeners.add(loginEventListener);
}
}
public void removeLoginListener(LoginListener loginEventListener) {
listeners.remove(loginEventListener);
}
public void dispatchLoginEvent(LoginEvent evt) {
for(LoginListener loginListener: listeners) {
loginListener.handleLoginEvent(evt);
}
}
}
將動作偵聽器添加到accept和cancel按鈕:
accept.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// validate login data
if(loginValid) {
dispatchLoginEvent(new LoginEvent(dialog, LoginEvent.LOGIN_SUCCEEDED));
} else {
dispatchLoginEvent(new LoginEvent(dialog, LoginEvent.LOGIN_FAILED));
}
}
});
cancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dispatchLoginEvent(new LoginEvent(dialog, LoginEvent.LOGIN_DIALOG_CLOSED));
}
});
訂閱LoginListener
在您的JFrame:
final LoginDialog dialog = new LoginDialog();
dialog.addLoginListener(new LoginListener() {
@Override
public void handleLoginEvent(LoginEvent evt) {
if(evt.getId() == LoginEvent.LOGIN_SUCCEEDED {
dialog.close();
//continue execution
return;
}
if(evt.getId() == LoginEvent.LOGIN_FAILED) {
JOptionPane.showMessageDialog(null, "Login failed!");
return;
}
if(evt.getId() == LoginEvent.CLOSE_LOGIN_DIALOG) {
dialog.close();
// do something when this dialog is closed
}
}
};
dialog.show();
2020-10-17
總結
以上是生活随笔為你收集整理的java取消按钮_Java Swing-单击取消按钮时不循环的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 极氪回应 001 动力系统故障:不存在安
- 下一篇: 延迟发布?苹果新Studio Displ