それはPropertyChangeListenerインターフェースを使用するのに良い方法ですか?
-
20-12-2019 - |
質問
私は propertychange()リスナーによって傍受され、扱われるイベントを発射する fireindexedpropertychange()メソッドの深い意味と使用に関連しています。私は別のクラスで宣言します。
たとえば、JButtonを使用してログイン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 および値は、ユーザーがログインできる場合はtrueです。そのボタンをClikCの場合はfalse、それ以外の場合はfalse
-
古い値は、変更可能なプロパティの古い値です(私の例ではfalseはfalseです。ログインウィンドウがログインしていないことを意味します。 loginresul= false
-
新しい値:この場合、 loginresult 変数の内容です(ユーザーがシステムにログインしている場合はtrue)
だからこの propertychange イベントは、これらのパラメータに基づいて処理するMy PropertyChange()メソッド(リスナークラスで宣言されています)によって傍受されます。たとえば、次のようにします。道:
** PropertyNameがloginResultの場合、新しい値がtrueの場合は、ログインウィンドウを再度表示しないが、メインアプリケーションウィンドウを表示する**
それは私の推論が正しいです、そしてそれは propertychangeListener インターフェースを使う良い方法かもしれませんか?
tnx
andrea
解決
あなたはそのようにそれを使うことができて仕事をします。しかし、私はあなたの質問がそれがうまくいくかどうかではなく意味についてのより多くのものです。そのインタフェースのパッケージはjava.beans
で、Beanのコンテキストに入ります。あなたがBeansコンテキストでそれを使用しているなら、i.e.あなたのイベント発行者は豆です。その場合、インターフェースの「深い意味」はあなたの使用と同意すると思います。Javadocは
「PropertyChange」イベントは、Beanが "Bund"プロパティを変更するたびに発生します。
あなたがそれがBeanとうまくいっているとは思わない場合は、あなた自身の
を作成します他のヒント
使用例を実装するためにイベントを使用する理由はありません。あなたは簡単なことを過ぎています。コードは以下のように見えるべきです。
@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");
}
}
.