سؤال

لدي شك فيما يتعلق بالمعنى العميق واستخدام FireIndexedPropertyChange() الطريقة التي تطلق حدثًا سيتم اعتراضه ومعالجته بواسطة a خاصية التغيير () المستمع الذي أعلنه في فصل آخر.

على سبيل المثال، في الفصل الذي يقوم بتنفيذ واجهة المستخدم الرسومية لتسجيل الدخول (التي تعرض نموذج تسجيل الدخول) باستخدام JButton، لدي هذه الطريقة التي يتم تنفيذها عندما ينقر المستخدم على الزر الخاص بي:

@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);   


}

لذلك، عندما ينقر المستخدم الذي لم يسجل بعد على الزر الخاص بي، يتم تنفيذ هذه الطريقة ويتم إطلاق ملف جديد تغيير الملكية حدث.

لي تغيير الملكية يأخذ الحدث نفسه المعلومات التالية:

  1. ال اسم الخاصية هذا هو اسم الخاصية التي يمكن تغييرها (في المثال الخاص بي اسمه تسجيل الدخولResult لأن لدي متغير منطقي اسمه تسجيل الدخولResult وتكون القيمة صحيحة إذا كان بإمكان المستخدم تسجيل الدخول عند النقر فوق الزر، وتكون القيمة خاطئة بخلاف ذلك

  2. ان القيمة القديمة هي القيمة القديمة للخاصية التي يمكن تغييرها (في المثال الخاص بي غير صحيحة لأنه إذا رأى المستخدم نوافذ تسجيل الدخول فهذا يعني أنه لم يسجل الدخول وأن تسجيل الدخولResul=false

  3. ال قيمة جديدة:في هذه الحالة هو محتوى تسجيل الدخولResult متغير (صحيح إذا تم تسجيل دخول المستخدم إلى النظام)

إذا هذا تغيير الملكية سيتم اعتراض الحدث من قبل بلدي خاصية التغيير () الطريقة (المعلن عنها في فئة المستمع) التي تتعامل معها بناءً على هذه المعلمات:على سبيل المثال بالطريقة التالية:

** إذا كان اسم الخاصية هو loginResult وإذا كانت القيمة الجديدة صحيحة فلا تعرض نافذة تسجيل الدخول مرة أخرى بل اعرض نافذة التطبيق الرئيسية **

هل هذا تفكيري صحيح ويمكن أن يكون طريقة جيدة لاستخدام PropertyChangeListener واجهه المستخدم؟

ثانكس

أندريا

هل كانت مفيدة؟

المحلول

يمكنك استخدامه بهذه الطريقة وسيعمل.لكنني أعتقد أن سؤالك يتعلق بالدلالات أكثر من مجرد ما إذا كان يعمل أم لا.حزمة تلك الواجهة هي java.beans مما يضعه في سياق الفول.إذا كنت تستخدمه في سياق الفول، أي.ناشر الحدث الخاص بك هو حبة فول، فأعتقد أن "المعنى العميق" للواجهة يتوافق مع استخدامك.يقول جافادوك

يتم إطلاق حدث "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");
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top