2011-10-04 12 views
5

हां, यह प्रश्न हर जगह है। लेकिन सभी (कामकाजी) समाधान AWTUtilities टूलकिट का उपयोग करते हैं, जो प्रतिबंधित है।जावा - ओएल 'पारदर्शी जेएफआरएम, प्रतिबंधित libs के बिना

तो। मैं बस अपनी खिड़की की अस्पष्टता को नियंत्रित करना चाहता हूं। आकार या अनावृत करने की कोई ज़रूरत नहीं है। बस एक पारदर्शी सामग्रीपैन (आसान), और एक पारदर्शी जेएफआरएएम पृष्ठभूमि (हास्यास्पद रूप से मुश्किल)।

मैं शपथ ले सकता था कि मुझे कल सामान का सही संयोजन मिला, लेकिन अब मैं इसे पुन: उत्पन्न नहीं कर सकता। इसके अलावा AWTUtilities का उपयोग किए बिना कुछ समाधान भी हैं, लेकिन वे काम नहीं करते हैं ... क्या किसी के पास कोई अच्छा समाधान है?

मेरी नाकाम रहने के कोड का एक उदाहरण:

public static void main(String[] args) { 
    JFrame test = new JFrame(); 
    test.setSize(400, 400); 
    test.setLocationRelativeTo(null); 
    test.setUndecorated(true); 
    test.setBackground(new Color(0, 0, 0, 0)); 
    test.getContentPane().setBackground(new Color(0,0,0,0)); 
    test.setVisible(true); 
} 

लेकिन यह सिर्फ एक सफेद वर्ग में आता है। नजदीक पर बिना सिगार के। मैंने पेंट विधि को ओवरराइड करने का भी प्रयास किया है, और कोई अल्फा चैनल फेंकने के बारे में कुछ कह रहा था, लेकिन इससे इसे काला (बिल्कुल) बनाया गया। तो ... यह ढेर ओवरफ्लो है।

यदि कोई डुप्ली है जो इसका उत्तर देता है, तो कृपया मुझे इंगित करें और मैं तुरंत हटा दूंगा।

अद्यतन टिप्पणी में अनुरोध के अनुसार, यहाँ कैसे मैं यहां पहुंचे का एक इतिहास है:

पहले लिंक हर किसी पर आता है how to create translucent and shaped windows. यह वहाँ इसी तरह के कई लाइनों है करने के लिए "... के साथ फ्रेम पारदर्शी अस्पष्टता का 75% स्तर। " तो ... ऐसा लगता है कि कम से कम उस लेख में, उन्हें परिभाषित किया गया है। दुर्भाग्य से वे पुस्तकालय का उपयोग करते हैं।

एक जोड़े लिंक है कि मैं पीछा कर सकते हैं:

एक गैर काम "काम" समाधान http://www.java-gaming.org/index.php?topic=24635.0 में रिपोर्ट किया गया है जो कुछ उम्मीद से पता चलता है, लेकिन मैं यह काम नहीं कर सकता है।

http://techgearup.wordpress.com/2008/09/19/transparent-jframe-background/ स्क्रीनशॉट का उपयोग करके एक हैकिश तरीका है और कुछ अन्य स्थानों में डुप्लिकेट किया गया है।

+3

क्या आप जावा 7 का उपयोग कर सकते हैं? क्या आप कुछ कामकाजी समाधानों से लिंक कर सकते हैं ताकि हम देख सकें कि आपने क्या प्रयास किया है? –

+1

कृपया [confound] नहीं करें (http://stackoverflow.com/questions/3517722/java-transparent-jscrollpane/3518047#3518047) _opacity_ और _transparency_। – trashgod

+0

सहमत है, यह जावा 7 पर नई सुविधाओं में से एक है: http://download.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html –

उत्तर

1

आप Java v.6u10 + या तृतीय-पक्ष पुस्तकालयों का उपयोग किए बिना ऐसा नहीं कर सकते हैं जो देशी कोड को कॉल करते हैं। स्विंग फ्रेम्स, डायलॉग और विंडोज़ में 'शीर्ष-स्तरीय घटक' माना जाता है और अंतर्निहित विंडोिंग सिस्टम में प्रस्तुत किया जाता है। जावा v6u10 से पहले, सभी शीर्ष-स्तरीय घटकों में एक डिफ़ॉल्ट, अपारदर्शी प्रकाश-भूरे रंग की पृष्ठभूमि थी, और जावा कोड से इसे बदलने का कोई तरीका नहीं था।

+0

स्पष्ट रूप से जावा 6u10 अक्टूबर 2008 से बाहर हो गया है, जो मेरे उपयोगकर्ताओं के लिए पर्याप्त है। यह Java 6u10 के बाद रिलीज़ में कैसे पूरा किया जा सकता है? – Ben

+0

6u10 में - आपको AWTUtilities का उपयोग करना होगा, 7 के बाद उन्होंने विंडो और कुछ अन्य वर्गों में विधियों को जोड़ा। http://download.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html#6u10 (मुझे एहसास है कि आपने AWTUtilities को "प्रतिबंधित" सेट किया है, लेकिन यह मूल रूप से जावा ऐसा करने के लिए आपको प्रदान करता है।) – Nate

+0

ठीक मदद के लिए धन्यवाद। मैं एक ओपन-सोर्स प्रोजेक्ट पर काम कर रहा हूं और मुझे यकीन नहीं है कि अनियंत्रित फाइलों के प्रति दृष्टिकोण। लेकिन यह एक अलग सवाल है :) – Ben

0

Sigh मैं एक ही समस्या में आया, और इसके बाद काम करने में बहुत समय बाद, मुझे अपने कंप्यूटर पर एक उचित सेट पारदर्शी स्क्रीन प्राप्त करने का एक तरीका मिला। हालांकि, जैसे ही आप फ्रेम पारदर्शी सेट करते हैं, उतनी सारी चीजें काम करना बंद कर देती हैं। यदि आप कहीं भी JTextArea घोषणा का उपयोग करते हैं, तो यह तुरंत काम करना बंद कर देता है। यह एक त्रुटि भी फेंक नहीं होगा!

तो यहां कोड है, उम्मीद है कि यह कुछ उपयोग है। कृपया उत्तर दें यदि आप इसके साथ एक काम कर रहे JScrollPane बनाते हैं :)

public class gui { 
    public frame f; 
    public String name = "Transparent?"; //name your frame * 
    public JButton exit = new JButton("Exit"); 
    public gui(){ //non-static context 
     f = new JFrame(name); 
     f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); //* 
     f.setLocationRelativeTo(null); 
     f.setExtendedState(f.getExtendedState() | JFrame.MAXIMIZED_BOTH); 
     //maximizes window. if you dont want it, f.setSize(int, int) 
     f.setUndecorated(true); //necessary for setOpacity 
     f.setOpacity(.7f); //achieve trasparancy 
     f.setVisible(true); //show window 
     exit.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent arg0){ 
       System.exit(0); 
      } 
     }); 
     f.add(exit, BorderLayout.CENTER); 
     //since X is not available in the window, make a button to exit 
    } 

    public static void main(){ 
     new gui(); 
    } 
} 
//* Note: since the default Window manager is set off with setUndecorated(true), 
// the name and buttons won't really show. 
+0

ओह मैं उल्लेख करना भूल गया, JTextField अभी भी काम करता है। एकमात्र चीज जो अब तक काम नहीं करती है (जो चीजें मैं उपयोग कर रहा था) JTextArea और JScrollPane मैंने अभी तक सीमाओं का परीक्षण नहीं किया है, लेकिन यह मुख्य चिंता नहीं है – nkazuko

+1

कृपया जावा नामकरण सम्मेलनों को सीखें और उन्हें चिपकाएं – kleopatra

संबंधित मुद्दे