سؤال

هذه المقالة من أشعة الشمس. أحاول أن إنشاء نافذة شفافة.

ولدي صورة واحدة داخل علامة على الإطار. أريد الصورة لتكون واضحة ولكن إطار غير مرئي.

عند يمكنني استخدام


try {
   Class awtUtilitiesClass = Class.forName("com.sun.awt.AWTUtilities");
   Method mSetWindowOpacity = awtUtilitiesClass.getMethod("setWindowOpacity", Window.class, float.class);
   mSetWindowOpacity.invoke(null, window, Float.valueOf(0.75f));
} catch (NoSuchMethodException ex) {
   ex.printStackTrace();
} catch (SecurityException ex) {
   ex.printStackTrace();
} catch (ClassNotFoundException ex) {
   ex.printStackTrace();
} catch (IllegalAccessException ex) {
   ex.printStackTrace();
} catch (IllegalArgumentException ex) {
   ex.printStackTrace();
} catch (InvocationTargetException ex) {
   ex.printStackTrace();
}

ويجعل كل شيء شفاف ممكن للحفاظ على مكونات غير شفاف.

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

المحلول

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

window.setBackground(new Color(1.0, 1.0, 1.0, 0.25));

وينبغي أن تعطيك الأبيض، نافذة شفافة.

نصائح أخرى

ويمكنك الاستمرار في استخدام الطبقة AWTUtilities، ولكن بدلا من وضع التعتيم مع setWindowOpacity () setWindowOpaque (). يؤدي ذلك إلى إيقاف الخلفية من النافذة، ولكن لا يزال يمكن استخلاصها أي شيء ترسمه داخل نافذة كما كان من قبل. اعتبارا من الأخيرة جافا 6 تحديثات هذا هو الآن الطريقة الصحيحة لفعل الأشياء. ستعمل AWTUtilities على كل من ماك ويندوز من مايكروسوفت. سيتم نقل هذه الأساليب إلى java.awt.Window نفسها في جافا 7.

وتحتاج إلى مجموعة من الابهام من المكونات الطفل، شيء من هذا القبيل

childComponent.setOpaque(true);

وهذا سيجعلهم مبهمة، دون إطار مبهمة.

وأود أن أتوسع في إجابة سابقة مع التالية. وهذا خلق نافذة مع 0.05 الشفافية أو 12.75 من 255. ثم يتم تعيين المكونات إلى شفافية 0.50f هذا سوف يؤثر فقط المكونات القابلة للنقر. غير قابلة للنقر مثل تسميات يمكن أن يكون شفافيتها مجموعة ما من أي وقت مضى. ولكن هذا بقع المشكلة مكونات قابلة للنقر عليه تغيير الألوان.

JWindow subFrame = new JWindow();           
subFrame.setBounds(0, 0, 500, 500);
subFrame.setAlwaysOnTop(true);
subFrame.setOpacity(0.50f);
subFrame.setBackground(new Color(1.0f, 1.0f, 1.0f, 0.05f));

JButton button = new JButton("Hello");
button.setBounds(20, 180, 100, 40);

subFrame.getContentPane().setLayout(null);
subFrame.getContentPane().add(button);
subFrame.setVisible(true);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top