سؤال

في كل مرة أقوم فيها باستدعاء طريقة pack() على JFrame، فإنها تنتقل إلى الموضع الأولي حيث كانت عند البدء.عندما أحاول الحصول على موقع JFrame (getLocation، getLocationOnScreen) فإنه لا يزال هو نفس الموضع الأولي بغض النظر عن تحريك النافذة.أنا أقوم بتشغيل Archlinux مع Awesome WM.الرجاء المساعدة.

شكرا Uiiii

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

تحرير 2: لذلك وجدت للتو أن باولو (من التعليق) على حق.إنه يعمل بشكل جيد في Xfce، لكن في Awesome WM لا يعمل.

تحرير 3: أنا حقًا لا أفهم لماذا تصوت على السؤال.هذه هي المرة الأولى التي أستخدم فيها وظيفة pack()، لذلك لا أعرف ما هو سلوكها الصحيح.لا يوجد أي تفسير في مستند Java API إذا كان موضع النافذة سيتغير.أنا فقط استخدم هذا لأول مرة في Awesome WM الذي أستخدمه كمدير للنوافذ، لذلك لا أعرف أنه يجب أن يتصرف بطريقة أخرى.لقد حاولت أن أجد شيئًا عنه على الإنترنت ولكن لم أجد شيئًا.أعتقد أن هذا السؤال يمكن أن يكون مفيدًا لشخص ما بعد أن وجدت الحل.من المؤكد أن هناك مطوري جافا آخرين يستخدمون Awesome WM (أو البعض المماثل الذين لديهم نفس المشكلة).

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

المحلول

لقد وجدت الحل!المشكلة هي أن جافا لديها بعض المشاكل مع بعض مديري النوافذ.الحل بسيط - فقط قم بالتثبيت com.wmname جدوى ( http://tools.suckless.org/wmname ) و اهرب 'wmname LG3D'.يقوم بتغيير اسم مدير النوافذ الفعلي إلى LG3D ويعتبره Java متوافقًا مع WM.

أعرف هذا قبل مشكلتي.لذلك أحاول تعيين اسم LG3D عالميًا في ملف .xinitrc ولكن يبدو أنه لا يعمل.يجب أن أتصل"wmname LG3D"بشكل صريح في كل محطة تعمل على تشغيل بعض تطبيقات جافا.

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