在java swing中创建一个透明的JFrame

时间:2011-12-05 09:38:41

标签: swing jframe

大家好,我在java中制作了一个swing应用程序,但问题是如何在java中实现透明框架。

我想像附加图像一样进行用户界面设计,但是probem是框架不透明,所以如果该图层上没有组件,它会显示默认颜色。

就像在右侧一样,我想在顶部自由和底部自由部分上将此框架显示为透明,

我使用AWTUtilities,但它对我不起作用。

我该怎么做,请回复,

还给我一个提示,在未修饰的窗口中按标题栏拖动窗口

提前感谢enter image description here

1 个答案:

答案 0 :(得分:3)

透明背景组件

public class TransparentBackground extends Jcomponent { 
    private JFrame frame; 
    private Image background;

public TransparentBackground(JFrame frame) {
    this.frame = frame;
    updateBackground( );
}

public void updateBackground( ) {
    try {
        Robot rbt = new Robot( );
        Toolkit tk = Toolkit.getDefaultToolkit( );
        Dimension dim = tk.getScreenSize( );
        background = rbt.createScreenCapture(
        new Rectangle(0,0,(int)dim.getWidth( ),
                          (int)dim.getHeight( )));
    } catch (Exception ex) {
        p(ex.toString( ));
        ex.printStackTrace( );
    }
}
public void paintComponent(Graphics g) {
    Point pos = this.getLocationOnScreen( );
    Point offset = new Point(-pos.x,-pos.y);
    g.drawImage(background,offset.x,offset.y,null);
}
}

您可以使用简单的main()方法运行此操作,将一些组件放到面板上并将其放入框架中:

public static void main(String[] args) {
    JFrame frame = new JFrame("Transparent Window");
    TransparentBackground bg = new TransparentBackground(frame);
    bg.setLayout(new BorderLayout( ));
    JButton button = new JButton("This is a button");
    bg.add("North",button);
    JLabel label = new JLabel("This is a label");
    bg.add("South",label);
    frame.getContentPane( ).add("Center",bg);
    frame.pack( );
    frame.setSize(150,100);
    frame.show( );
}