JWindow دائمًا في الأعلى لا يحصل على أحداث التركيز
سؤال
لدي نافذة 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، وليس تنفيذها بنفسك.