2012-08-07 14 views
8

मैं एक सर्कल के आकार की खिड़की बनाने की कोशिश कर रहा हूं जो माउस का पालन करता है और अंतर्निहित विंडो पर क्लिक पास करता है।जावा पारदर्शी विंडो

मैं इसे पायथन और क्यूटी के साथ कर रहा था (Python overlay window देखें) लेकिन फिर मैंने जावा और स्विंग पर स्विच किया। हालांकि मैं खिड़की पारदर्शी बनाने में सक्षम नहीं हूँ। मैंने this method की कोशिश की लेकिन यह काम नहीं करता है, हालांकि मुझे लगता है कि मेरा सिस्टम पारदर्शिता का समर्थन करता है क्योंकि अगर मैं Screencast-O-Matic (जो जावा में है) शुरू करता है, तो आयत वास्तव में पारदर्शी है।

मैं ऐसा कुछ कैसे प्राप्त कर सकता हूं? (मैं लिनक्स केडीई 4 पर हूँ)

+0

क्या आपको इस मुद्दे के लिए कोई समाधान मिला है? मुझे एक ही समस्या का सामना करना पड़ रहा है .. मैंने स्क्रीनकास्ट-ओ-मैटिक जैसे एप्लिकेशन बनाए हैं जो विंडोज ओएस के लिए अच्छी तरह से काम करता है लेकिन लिनक्स के लिए काम नहीं कर रहा है .. अगर आपको कुछ मिला तो कृपया यहां सुझाव दें, http://stackoverflow.com/questions/25009276/स्विंग-वर्क्स-अलग-अलग-प्लेटफ़ॉर्म – tarkikshah

+0

नहीं, मैंने अपने स्क्रीनकास्ट एप्लिकेशन के लिए पीईक्यूटी पर वापस स्विच किया, क्योंकि मेरे पास जावा के साथ अन्य समस्याएं थीं। –

+0

ठीक है ... धन्यवाद .. – tarkikshah

उत्तर

2

आप एक बाहरी lib का उपयोग किए बिना अपने दम पर यह करने के लिए, चाहते हैं, आप एक धागा है कि प्रदर्शन शुरू कर सकता है:

  • पारदर्शी खिड़की अदृश्य सेट

या आप इस्तेमाल कर सकते हैं डेस्कटॉप

  • अपनी विंडो की पृष्ठभूमि छवि के रूप में इस स्क्रीनशॉट डाल के एक स्क्रीनशॉट बनाने के JavaFX

  • +0

    मैं ऐसा नहीं कर सकता क्योंकि खिड़की माउस का पालन करेगी, इसलिए मुझे हर बार स्क्रीनशॉट लेना होगा, और मुझे लगता है कि यह एक अक्षम विधि है। –

    +0

    और अन्य विकल्प का उपयोग करने के बारे में क्या? –

    +0

    क्षमा करें, लेकिन मुझे लिनक्स के लिए जावाएफएक्स नहीं मिल रहा है और जेडीके 6 –

    9

    जावा ट्यूटोरियल How to Create Translucent and Shaped Windows क्यों काम करने में विफल रहा? क्या आप जावा 6 या जावा 7 का नवीनतम संस्करण उपयोग कर रहे हैं? May/June issue of Java Magazine में, जावा 7 की आवश्यकता वाले आकार और पारदर्शी विंडो पर एक ट्यूटोरियल था। इसे पढ़ने के लिए आपको शायद जावा पत्रिका के लिए साइन अप करने की आवश्यकता होगी। यदि आप इस आपके सिस्टम पर चलाने के लिए प्राप्त कर सकते हैं देखें:

    import java.awt.*; //Graphics2D, LinearGradientPaint, Point, Window, Window.Type; 
    import javax.swing.JComponent; 
    import javax.swing.JFrame; 
    import javax.swing.SwingUtilities; 
    
    /** 
    * From JavaMagazine May/June 2012 
    * @author josh 
    */ 
    public class ShapedAboutWindowDemo { 
    
        /** 
        * @param args the command line arguments 
        */ 
        public static void main(String[] args) { 
         //switch to the right thread 
         SwingUtilities.invokeLater(new Runnable() { 
          @Override 
          public void run() { 
           JFrame frame = new JFrame("About box"); 
           //turn of window decorations 
           frame.setUndecorated(true); 
           //turn off the background 
           frame.setBackground(new Color(0,0,0,0)); 
           frame.setContentPane(new AboutComponent()); 
           frame.pack(); 
           //size the window 
           frame.setSize(500, 200); 
           frame.setVisible(true); 
           //center on screen 
           frame.setLocationRelativeTo(null); 
          } 
         } 
         ); 
        } 
    
        private static class AboutComponent extends JComponent { 
         public void paintComponent(Graphics graphics) { 
          Graphics2D g = (Graphics2D) graphics; 
    
          //create a translucent gradient 
          Color[] colors = new Color[]{ 
              new Color(0,0,0,0) 
              ,new Color(0.3f,0.3f,0.3f,1f) 
              ,new Color(0.3f,0.3f,0.3f,1f) 
              ,new Color(0,0,0,0)}; 
          float[] stops = new float[]{0,0.2f,0.8f,1f}; 
          LinearGradientPaint paint = new LinearGradientPaint(
                 new Point(0,0), new Point(500,0), 
                 stops,colors); 
          //fill a rect then paint with text 
          g.setPaint(paint); 
          g.fillRect(0, 0, 500, 200); 
          g.setPaint(Color.WHITE); 
          g.drawString("My Killer App", 200, 100); 
         } 
        } 
    } 
    
    +0

    मैं जावा 6 पर हूं, इसलिए मैं पृष्ठ के निचले हिस्से में संगतता विधियों का उपयोग किया ... आपके उदाहरण के साथ मुझे [यह] मिलता है (https://dl.dropbox.com/u/9287758/Immagini/JavaNoTransparency.png) –

    +0

    ठीक है। आपके द्वारा जावा ट्यूटोरियल को जावा 6 अपडेट 10 की आवश्यकता होती है, इसलिए जब तक आपके पास ऐसा हो, तो इसे काम करना चाहिए। यदि नहीं, तो लिनक्स संगतता समस्या होनी चाहिए और उस स्थिति में मैं आपको जेडीके 7 में अपग्रेड करने की सलाह देता हूं और देखता हूं कि यह ठीक करता है या नहीं। – Thorn

    3

    आप जावा 6 का उपयोग कर रहे हैं, तो आप निजी एपीआई AWTUtilities का इस्तेमाल करते हैं की जरूरत है। अधिक जानकारी के

    उदाहरण के लिए Java SE 6 Update 10 API की जाँच करें

    यह त्वरित हैक का एक सा है, लेकिन यह

    public class TransparentWindow { 
    
        /** 
        * @param args the command line arguments 
        */ 
        public static void main(String[] args) { 
    
         EventQueue.invokeLater(new Runnable() { 
          @Override 
          public void run() { 
    
           MyFrame frame = new MyFrame(); 
           frame.setUndecorated(true); 
    
           String version = System.getProperty("java.version"); 
           if (version.startsWith("1.7")) { 
    
    
            GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
            GraphicsDevice graphicsDevice = ge.getDefaultScreenDevice(); 
    
            System.out.println("Transparent from under Java 7"); 
            /* This won't run under Java 6, uncomment if you are using Java 7 
            System.out.println("isPerPixelAlphaTranslucent = " + graphicsDevice.isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSLUCENT)); 
            System.out.println("isPerPixelAlphaTransparent = " + graphicsDevice.isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSPARENT)); 
            System.out.println("isPerPixelAlphaTranslucent = " + graphicsDevice.isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.TRANSLUCENT)); 
            */ 
            frame.setBackground(new Color(0, 0, 0, 0)); 
    
           } else if (version.startsWith("1.6")) { 
    
            System.out.println("Transparent from under Java 6"); 
            System.out.println("isPerPixelAlphaSupported = " + supportsPerAlphaPixel()); 
            setOpaque(frame, false); 
    
           } 
    
           frame.setSize(400, 400); 
           frame.setLocationRelativeTo(null); 
           frame.setVisible(true); 
    
          } 
         }); 
    
        } 
    
        public static class MyFrame extends JFrame { 
    
         public MyFrame() throws HeadlessException { 
    
          setContentPane(new MyContentPane()); 
          setDefaultCloseOperation(EXIT_ON_CLOSE); 
    
          addMouseListener(new MouseAdapter() { 
           @Override 
           public void mouseClicked(MouseEvent e) { 
    
            if (e.getClickCount() == 2) { 
    
             dispose(); 
    
            } 
    
           } 
          }); 
    
         } 
        } 
    
        public static class MyContentPane extends JPanel { 
    
         public MyContentPane() { 
    
          setLayout(new GridBagLayout()); 
          add(new JLabel("Hello, I'm a transparent frame under Java " + System.getProperty("java.version"))); 
    
          setOpaque(false); 
    
         } 
    
         @Override 
         protected void paintComponent(Graphics g) { 
    
          super.paintComponent(g); 
    
          Graphics2D g2d = (Graphics2D) g.create(); 
          g2d.setColor(Color.BLUE); 
    
          g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f)); 
          g2d.fillRoundRect(0, 0, getWidth() - 1, getHeight() - 1, 20, 20); 
    
         } 
        } 
    
        public static boolean supportsPerAlphaPixel() { 
    
         boolean support = false; 
    
         try { 
    
          Class<?> awtUtilsClass = Class.forName("com.sun.awt.AWTUtilities"); 
          support = true; 
    
         } catch (Exception exp) { 
         } 
    
         return support; 
    
        } 
    
        public static void setOpaque(Window window, boolean opaque) { 
    
         try { 
    
          Class<?> awtUtilsClass = Class.forName("com.sun.awt.AWTUtilities"); 
          if (awtUtilsClass != null) { 
    
           Method method = awtUtilsClass.getMethod("setWindowOpaque", Window.class, boolean.class); 
           method.invoke(null, window, opaque); 
    //    com.sun.awt.AWTUtilities.setWindowOpaque(this, opaque); 
    //    ((JComponent) window.getContentPane()).setOpaque(opaque); 
    
          } 
    
         } catch (Exception exp) { 
         } 
    
        } 
    
        public static void setOpacity(Window window, float opacity) { 
    
         try { 
    
          Class<?> awtUtilsClass = Class.forName("com.sun.awt.AWTUtilities"); 
          if (awtUtilsClass != null) { 
    
           Method method = awtUtilsClass.getMethod("setWindowOpacity", Window.class, float.class); 
           method.invoke(null, window, opacity); 
    
          } 
    
         } catch (Exception exp) { 
    
          exp.printStackTrace(); 
    
         } 
    
        } 
    
        public static float getOpacity(Window window) { 
    
         float opacity = 1f; 
         try { 
    
          Class<?> awtUtilsClass = Class.forName("com.sun.awt.AWTUtilities"); 
          if (awtUtilsClass != null) { 
    
           Method method = awtUtilsClass.getMethod("getWindowOpacity", Window.class); 
           Object value = method.invoke(null, window); 
           if (value != null && value instanceof Float) { 
    
            opacity = ((Float) value).floatValue(); 
    
           } 
    
          } 
    
         } catch (Exception exp) { 
    
          exp.printStackTrace(); 
    
         } 
    
    
         return opacity; 
    
        } 
    } 
    

    भर में विचार हो जाता है विंडोज 7 पर यह

    पैदा करता है जावा के तहत 6 Java6

    Unde आर जावा 7 Java7

    +0

    मैंने दूसरे के साथ –

    +0

    संकलित नहीं किया है, मुझे यकीन नहीं है कि आपका क्या मतलब है, मेरे उदाहरणों की जांच करें – MadProgrammer

    +0

    मैं जावा 6 पर हूं, यह केवल AWTUtilities के साथ संकलित है, लेकिन जब मैं इसे चलाता हूं तो इसमें कोई पारदर्शिता नहीं होती है । –

    3

    मैं लगता है कि यह काम करेगा, मैं पहले से ही it..to एक JFrame या एक खिड़की पारदर्शी आप पहली बार Undecorated(true) undecorate के फ्रेम की जरूरत बनाने की कोशिश की। यहां नमूना कोड है:

    import javax.swing.*; 
    import com.sun.awt.AWTUtilities; 
    import java.awt.Color; 
    
        class transFrame { 
         private JFrame f=new JFrame(); 
         private JLabel msg=new JLabel("Hello I'm a Transparent Window"); 
    
        transFrame() { 
         f.setBounds(400,150,500,500); 
         f.setLayout(null); 
         f.setUndecorated(true);  // Undecorates the Window 
         f.setBackground(new Color(0,0,0,25)); // fourth index decides the opacity 
         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
         msg.setBounds(150,250,300,25); 
         f.add(msg); 
         f.setVisible(true); 
         } 
    
         public static void main(String[] args) { 
         new transFrame(); 
         } 
    
        } 
    

    एकमात्र समस्या यह है कि आपको बटनों का उपयोग करके बंद करने और कम करने के लिए अपना कोड जोड़ने की आवश्यकता है।

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