سؤال

أنا أكتب لعبة صغيرة، مع إطار JFrame واحد يحمل اللعبة الرئيسية، وإطار JFrame آخر يعرض النتيجة.المشكلة هي أنه عندما أنتهي من بنائها، ينتهي الأمر دائمًا بتركيز نتيجة JFrame!لقد حاولت الاتصال بـ ScoreDisplay.toFront() وscoreDisplay.requestFocus() وحتى:

display.setState(JFrame.ICONIZED);
display.setState(JFrame.NORMAL);

هل هناك أي طريقة لجعل هذا العمل؟شكرا مقدما ، جون مورانو

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

المحلول

هل تفكر في وضع النتيجة في نفس الإطار كإطار لعبة؟

اخر ممكن (سريعة وقذرة) الخيار لخلق لهم في ترتيب عكسي، أو على الأقل (إذا كانت النتيجة تعتمد على لعبة) عرضها في ترتيب عكسي.

score.setVisible( true );
game.setVisible( true );

وتخميني هو أنه في الوقت الراهن وهم:

game.setVisible( true );
score.setVisible( true );

نصائح أخرى

تبديل alwaysOnTop

انظر هنا:

http://forums.sun.com/thread.jspa?threadID=5124278

اقرأ عن toFront في واجهة برمجة التطبيقات (API). http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Window.html#toFront

قد لا تسمح بعض الأنظمة الأساسية لهذا VM بوضع Windows فوق Windows من التطبيقات الأصلية ، أو Windows من VMs الأخرى.

في نظام التشغيل Windows ، على سبيل المثال ، يتسبب Tofront في أن يلبس الرمز الموجود على شريط المهام ، لكن النافذة تبقى في الخلف.

الفكر الوحيد الذي سيجبر النافذة على الأمام هو setalwaysontop.

frame.setAlwaysOnTop(true); 
frame.setAlwaysOnTop(false);

اتصل ب requestFocus() طريقة.

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

ولإعطائك فرصة أفضل للنجاح، أوصي أيضًا بالاتصال بـ toFront() الطريقة قبل طلب التركيز.

frame.setVisible(true);
frame.toFront();
frame.requestFocus();

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

والطريقة التي أود أن تفعل هي:

 frame.toFront();
 frame.setState(Frame.NORMAL); 

وإذا كنت تريد أيضا الحصول على مزيد من السيطرة على ذلك يجب عليك استخدام requestFocuse.

وراجع للشغل، وهنا مثال على ذلك: HTTP: //coding.derkeiler. كوم / الأرشيف / جافا / comp.lang.java.gui / 2006-06 / msg00152.html

وفقط إضافة السطر التالي من التعليمات البرمجية أعلاه رمز JOptionPaneMessageDialog ... this.setAlwaysOnTop (كاذبة)؛

frame.setExtendedState( JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);

وحاول ما سبق ..

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