创建完全透明窗体,主要先了解以下步骤:
- 设置JFrame窗口完全透明:AWTUtilities.setWindowOpaque(frame, false);
- 设置JPanel窗口半透明: G2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
- 设置JPanel窗体是否透明透明:setOpaque(false);
- 设置JPanel的Paint颜色渐变使用:GradientPaint(0, 0, color, width, height, color1, false);
- 效果如下:
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import com.sun.awt.AWTUtilities;
public class Test2 extends JPanel{
public Test2() {
// TODO 自动生成构造函数存根
this.setLayout(null);
this.setOpaque(false);
JButton button=new JButton("xxxxxxxx");
button.setBounds(0, 0, 100, 100);
this.add(button);
setBackground(Color.red);
}
private GradientPaint paint;
public Color color = Color.CYAN;
public Color color1 = Color.WHITE;
@Override
public void paint(Graphics g) {
// TODO 自动生成方法存根
Graphics2D g2 = (Graphics2D) g.create();
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,
0.5f));
super.paint(g2);
int height = getHeight();
int width = getWidth();
setColor(color, color1, width, height);
g2.setPaint(paint);
g2.fillRoundRect(0, 0, this.getWidth() - 100, this.getHeight() - 100,
25, 25);
int[] x1={this.getWidth() - 200, this.getWidth() - 200+30,this.getWidth() - 200+60};
int[] y1={this.getHeight() - 100, this.getHeight() - 100,this.getHeight() - 100+60};
g2.drawPolyline(x1, y1, 3);
g2.fillPolygon(x1, y1, 3 );
}
private void setColor(Color color, Color color1, int width, int height) {
paint = new GradientPaint(0, 0, color, width, height, color1, false);
}
public static void main(String[] args) {
JFrame frame=new JFrame() {
// @Override
// public void paint(Graphics g) {
// // TODO 自动生成方法存根 半透明
// Graphics2D G2=(Graphics2D) g.create();
// G2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,
// 0.5f));
// super.paint(G2);
// }
};;
frame.setUndecorated(true);
frame.add(new Test2());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(new Dimension(800,600));
AWTUtilities.setWindowOpaque(frame, false);
frame.setVisible(true);
}
}