JWindow دائمًا في الأعلى لا يحصل على أحداث التركيز

StackOverflow https://stackoverflow.com/questions/1430661

  •  07-07-2019
  •  | 
  •  

سؤال

لدي نافذة jwindow (تم ضبطها لتكون دائمًا في المقدمة) يمكنك النقر عليها للحصول على قائمة منبثقة.إذا قام المستخدم بالنقر بزر الماوس الأيمن على النافذة، فستظهر القائمة المنبثقة، ولكن إذا نقر المستخدم على أي نافذة أخرى (مثل فايرفوكس)، فلن تختفي القائمة المنبثقة.

حاولت إصلاحه عن طريق إضافة FocusListener على jwindow، وقمت بتطبيق FocusListener وتجاوزه


    public void focusGained(FocusEvent e) {
    System.out.println("gain" );
    }

    public void focusLost(FocusEvent e) {
    System.out.println("lost" );
    }

ولكن لا يتم استدعاء الحدث أبدًا.لقد حاولت أيضًا ما يلي ،


    addWindowFocusListener(new WindowAdapter() {
        public void windowGainedFocus(WindowEvent e) {
            System.out.println("gain 2" );
        }
        });

هذا الحدث أيضا لم يسمى.

كل ما يحتويه هذا jwindows هو JLabel واحد به صورة.

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

المحلول

من الذاكرة، لا تتلقى JWindow أحداث التركيز/النافذة.

نصائح أخرى

من المفترض أن تتصل setFocusableWindowState(true) على JWindow للسماح لها بالتركيز.ولكن هذا "لا يزال" ليس كافيا.ال JWindow يجب أيضًا أن تحتوي على مكونات قابلة للتركيز وما زلت غير قادر على تشغيلها.استخدام JFrame setUndecorated() يبدو الخيار الأفضل.

لتكون قابلة للتركيز، أ JWindow يجب أن يتم إنشاؤه مع أحد الوالدين Frame, ، يحب new JWindow(parentFrame).افعل ذلك وأعتقد أنك ستجد أنه سيحصل على التركيز تلقائيًا عندما تقوم بتعيينه ليكون مرئيًا.

لست متأكدًا حقًا مما تحاول القيام به.إذا كنت تحاول إخفاء النافذة المنبثقة يدويًا، فربما ينبغي عليك استخدام WindowListener والتعامل مع حدث windowDeactivated.

إذا كنت تريد حقًا عرض قائمة منبثقة، فيجب عليك استخدام JPopupMenu، وليس تنفيذها بنفسك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top