PropertyChangelistener 인터페이스를 사용하는 것이 좋은 방법입니까?
-
20-12-2019 - |
문제
firedexedPropertyChange () firedexedpropertychange () firedexedpropertychange () 의 사용과 관련이 있습니다. 내가 다른 수업에서 선언하는 것.
예를 들어 로그인 GUI를 구현하는 클래스에서 (로그인 양식을 표시하는 로그인 양식)이 메서드가 내 버튼의 사용자 CLIK를 수행 할 때 수행됩니다.
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.out.println("Button cliccked");
Main listener = new Main(); // I intantiate a new Main object to have the PropertyChangeListener
this.addPropertyChangeListener(listener); // I add the PropertyChange Listener to this LoginFrame object
/* I fire a PropertyChange: the event start and will be handled by the propper propertyChange() method definied in the
* listener class:
*
* @param "loginButtonClicked"
* */
firePropertyChange("loginResult", false, loginResult);
}
.
그래서 아직 기록되지 않은 사용자가 내 버튼을 클릭하면이 메서드가 수행되고 새 propertychange 이벤트가 발생합니다.
내 propertychange 이벤트 다음 정보를 가져옵니다.
-
propertyName 이 변경 될 수있는 속성의 이름 인 라는 부울 변수가 있기 때문에 loginResult 이라는 이름의 loginResult loginResult 및 값이 CLIKC가 버튼을 누르면 로그인 할 수있는 경우 true입니다. 그렇지 않으면
-
이전 값 은 변경할 수있는 속성의 이전 값입니다 (내 예에서는 사용자가 로그인 창이 로그인되지 않았 음을 의미합니다. loginResul= false
-
새 값 :이 경우 loginResult 변수의 내용입니다 (사용자가 시스템에 로그인 한 경우 true)
이 propertychange 이벤트는 이러한 매개 변수를 기반으로 처리하는 propertychange () 메소드 (Listener 클래스에서 선언)에 의해 인터셉트 될 것입니다. 예를 들어 다음과 같은 방법 :
** propertyName이 loginResult이고 새 값이 true이면 로그인 창을 다시 표시하지 않고 주 응용 프로그램 창을 표시하지 않습니다 **
은 그것이 올바른 것입니다. propertychangelistener 인터페이스를 사용하는 좋은 방법 일 수 있습니까?
tnx
andrea
해결책
그런 식으로 사용할 수 있으며 작동합니다.그러나 나는 당신의 질문이 그것이 작동하는지 여부보다는 의미론에 대해 더 중요하다고 생각합니다.해당 인터페이스의 패키지는 Bean의 컨텍스트에 넣는 java.beans
입니다.Beans 컨텍스트에서 사용하는 경우 I.E.E. 귀하의 이벤트 게시자는 콩이며 인터페이스의 "깊은 의미"가 귀하의 사용과 동의한다고 생각합니다.Javadoc은
bean이 "바인드 된"속성을 변경할 때마다 "PropertyChange"이벤트가 발생합니다.
콩과 잘 어울리지 않으면 자신만의
를 만드십시오.다른 팁
이벤트를 사용하여 이용 사례를 구현할 이유가 없습니다.당신은 단순한 것들을 지나치게 지나치게합니다.코드는 다음과 같이 간단히 보입니다.
@Override
public void actionPerformed(ActionEvent e) {
String login = loginTextField.getText();
char[] password = passwordField.getPassword();
boolean loginSuccessful = authenticationService.authenticate(login, password);
if (loginSuccessful) {
Main main = new Main();
main.setVisible(true);
this.setVisible(false);
}
else {
displayErrorMessage("Login failed");
}
}
.