Java transparent window

后端 未结 4 535
再見小時候
再見小時候 2020-12-10 15:54

I am trying to create a circle-shaped window that follows the mouse and pass clicks to the underlying windows.

I was doing this with Python and Qt (see Python overla

4条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-10 16:43

    Why did the Java tutorial How to Create Translucent and Shaped Windows fail to work? Are you using the latest version of Java 6 or Java 7? In the May/June issue of Java Magazine, there was a tutorial on shaped and transparent windows requiring java 7. You will probably need to sign up for Java magazine in order to read it. See if you can get this to run on your system:

    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);
            }
        }
    }
    

提交回复
热议问题